0

我是 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 ")

我遇到的问题是:当我执行 create_server 任务时:我有这个:[t] Executing task 'create_server' 我猜这是一个字符串问题,因为我是 python 新手

致命错误:名称查找失败 t

潜在异常:名称或服务未知

中止。

它对应于我传入的主机的第一个字符(作为字符串't...')。为什么会这样?

我调用 start_experiment 并将 server_host 定义为“name.server.org”

4

1 回答 1

0

您的问题在create_server(). 看一下该函数中的这两行:

使用液晶显示器(code_dir):
    运行(“java -jar server.jar”+端口+“>log_server.txt”)

run()命令正在远程服务器(由 指定env.host)上执行,但该位在本地with lcd(code_dir):计算机上强制执行某个目录,而不是在远程服务器上。

您收到的错误表明您正在尝试使用未知名称或服务。在这种情况下,程序很可能无法找到 server.jar。原因是您没有指定远程机器上的当前目录(run()正在执行命令的位置)。因此,将 更改lcd()为 acd()应该可以解决您的问题:

与 cd(code_dir):
    运行(“java -jar server.jar”+端口+“>log_server.txt”)
于 2013-07-23T05:26:43.757 回答