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