面料字符串问题

0 投票
1 回答
954 浏览
提问于 2025-04-17 19:42

我刚开始学习Python和fabric,下面是我写的代码:

def initialise_clients( hostlist): 
 env.roledefs['clients']=hostlist
 print hostlist 
 print("Setting up deployment: running on %d nodes \n" % len(hostlist))
 create_jar()


def init_server(host): 
 env.roledefs['server'] = host
 print "Initialising Server " + host

实例化的方式是:

 def start_experiment(nb_clients , nb_machines , nb_operations  , trx_length , nb_reads ,  nb_writes ,     
  dataset , server_host  , server_port , hostclients): 
  print("Running Experiment")
  address = server_host + ':' + server_port
  execute(init_server,address)
  execute(initialise_clients,hostclients)
  execute(create_server, server_port )

创建服务器的方法是:

 @roles('server')
 def create_server( port): 
  print("Creating Server")
  print env.host
  print(port)
  code_dir = '/net/work/evaluation/'
  with lcd(code_dir): 
     run("java -jar server.jar " + port + " > log_server.txt ")
     print("Server Initialised - Waiting for NFS to propagate ")

我遇到的问题是这样的:当我执行创建服务器的任务时,出现了这样的提示:[t] 正在执行任务 'create_server'。我猜这可能是字符串的问题,因为我对Python还不太熟悉。

致命错误:找不到名称 t

底层异常: 名称或服务未知

正在中止。

这个错误和我传入的主机的第一个字符有关(作为字符串 't...')。这是为什么呢?

我调用 start_experiment 时,server_host 定义为 "name.server.org"。

1 个回答

0

你的问题出在 create_server() 函数的最后几行。看看这两行代码:

with lcd(code_dir):
    run("java -jar server.jar " + port + " > log_server.txt ")

这里的 run() 命令是在远程服务器上执行的(由 env.host 指定),但是 with lcd(code_dir): 这部分是强制在本地机器上使用某个目录,而不是在远程服务器上。

你遇到的错误提示是说你在尝试使用一个未知的名称或服务。在这种情况下,很可能是程序找不到 server.jar 文件。原因是你没有指定远程机器上的当前目录(也就是 run() 命令执行的地方)。所以,把 lcd() 改成 cd() 应该能解决你的问题:

with cd(code_dir):
    run("java -jar server.jar " + port + " > log_server.txt ")

撰写回答