2015-02-11 3 views
1

Ищу возможность сделать что-то вроде этого:Как запустить пиро-сервер на удаленном ПК?

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. После этого шага я хочу выполнить функцию на удаленном объекте. К сожалению, если я запускаю Pyroserver, он не запускается в фоновом режиме, поэтому я не получаю никакого возвращаемого значения из stdout. Что было бы лучшим способом сделать это? Я довольно новичок в библиотеке пиро, поэтому, возможно, есть еще более элегантный способ этого, спасибо.

ответ

0

Распечатайте uri daemon до, вызывающий запросLoop(). Последний, как видно из названия, входит в цикл. Обычно он не возвращается от него, если не получает сигнал прерывания.

0

Я хотел бы предложить, чтобы иметь бегущую имя сервера и зарегистрировать предопределенный 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() 

Надеюсь, это поможет.

Смежные вопросы