2014-04-12 109 views
1

如何使用pushy來評估調用另一個函數的函數?我收到的錯誤是由於子功能在遠程客戶端上不存在。使用python pushy評估子函數

模塊test.py:

import os 
def func1(): 
    func2() 
def func2(): 
    print os.uname() 

模塊main.py

import pushy 
rc = pushy.connect('ssh:remote_network_address') 
proxy_func = rc.compile(test.func1) 
proxy_func() 

我會收到以下錯誤:

pushy.protocol.proxy.ExceptionProxy: global name 'func2' is not defined 

但是,如果'print os.uname()'位於func1,並且不會調用func2,代碼將按預期工作。基本上,我該如何看待func2,並且會在遠程客戶端還是本地執行?我可以控制在哪裏?解決此

回答

0

一種方法是調用executeeval與傳過來globals像這樣的功能:

import os 
def func1(): 
    func2() 

def func2(): 
    print os.uname() 

import pushy 
rc = pushy.connect('local:') 
# runs: 
rc.execute("func1()", globals={'func1':func1}) 
# runs: 
rc.eval("func1()", globals={'func1':func1}) 

# close 
rc.close() 

我得到這樣的結果:

('Linux', 'piane', '3.8.0-38-generic', '#56~precise1-Ubuntu SMP Thu Mar 13 16:22:48 UTC 2014', 'x86_64')

這是我不清楚如何你會通過compile來做到這一點,因爲它不需要globalslocals