Fabric String Issue

时间:2013-03-20 02:45:19

标签: python fabric

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

create Server方法是:

 @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]执行任务'create_server'我的猜测是因为我是python的新手而导致字符串问题

致命错误:t

的名称查找失败

基本例外:     姓名或服务未知

中止。

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

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

1 个答案:

答案 0 :(得分: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 ")