面料字符串问题
我刚开始学习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 ")