2015-02-11 134 views
1

我找了有可能做这样的事情:如何在远程电脑上启动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 /守护 并通过ssh返回的URI。在这一步之后,我想在远程对象上执行一个功能 。 不幸的是,如果我启动一个Pyroserver,它不会在后台运行,所以我没有从stdout得到任何返回值。 什么是最好的方法来做到这一点? 我对pyro库很新,所以也许有一些更优雅的方式,谢谢。

回答

0

打印守护进程的uri 之前调用requestLoop()。后者如名称所示,进入循环。除非收到中断信号,否则它通常不会从中返回。

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

希望这会有所帮助。

相关问题