我正在寻找这样的可能性:
import paramiko, Pyro4
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('machine1', username='user1')
stdin,stdout,stderr = ssh.exec_command("python server.py")
uri = stdout.readlines()[-1]
ssh.close()
worker = Pyro4.Proxy(uri)
worker.do_some_stuff()
# server.py
import Pyro4
class Worker(object):
def do_some_stuff():
....
worker = Worker()
daemon=Pyro4.Daemon()
uri=daemon.register(worker)
daemon.requestLoop()
print uri
所以我想登录一台机器启动PyroServer / Daemon 并通过ssh返回uri。在这一步之后,我想执行一个功能 在远程对象上。 不幸的是,如果我启动一个Pyroserver,它不会在后台运行,所以我不能从stdout获得任何返回值。 最好的方法是什么? 我对pyro库很新,所以也许有更优雅的方法,谢谢。
答案 0 :(得分:0)
在调用requestLoop()之前打印守护程序的uri 。正如名称所示,后者进入循环。除非收到中断信号,否则通常不会从中返回。
答案 1 :(得分:0)
我建议让名称服务器运行,并使用名称服务器注册预定义的uri,这不会让你等到uri,如下所示:
起始名称服务器:
python -m Pyro4.naming -n machine1_ip
现在在server.py中,包含以下行:
daemon=Pyro4.Daemon(machine1_ip)
worker=Worker()
uri=daemon.register(worker)
ns.register("worker_uri", uri)
现在您可以使用" worker_uri" URI:
test=Pyro4.Proxy("PYRONAME:worker_uri")
test.do_some_stuff()
希望这有帮助。