如何在远程PC上启动pyro服务器?

时间:2015-02-11 19:13:22

标签: python paramiko pyro

我正在寻找这样的可能性:

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库很新,所以也许有更优雅的方法,谢谢。

2 个答案:

答案 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()

希望这有帮助。