2010-12-15 57 views
0

我沒有設法使用通過其ssh X11管理功能的Paramiko python模塊。
我想使用它,就像我使用ssh -X選項一樣。
我已經嘗試了幾種解決方案,但沒有在我的系統上工作。用python編程的Paramiko X11模式

這裏是我試過的代碼:


client = paramiko.SSHClient() 
client.set_missing_host_key_policy(AutoAddPolicy()) 
client.connect(machineName, username=xxx, password=xxx) 
t = client.get_transport() 
chan = t.open_session() 
chan.request_x11() 
chan.set_combine_stderr (True) 
chan.exec_command (xxxxx) # the command that should display a X11 window 
bufsize = -1 
stdin = chan.makefile('wb', bufsize) 
stdout = chan.makefile('rb', bufsize) 
stderr = chan.makefile_stderr('rb', bufsize) 
for line in stdout: 
    print '... ' + line.strip('\n') 
client.close() 

我也試過(而不是exec_command):

chan.get_pty("vt100", 80, 50) 
chan.invoke_shell() 
chan.send(xxxxx) # the command that should display a X11 window 

不幸的是,我的應用程序凍結在通常出現X11窗口的時刻。備註:如果我啓動一個沒有顯示X11窗口的命令,它可以很好地工作。

感謝你的幫助,
問候

+0

是您的顯示環境變量對遠程shell設置?如果是這樣,它是什麼? – kevpie 2010-12-15 10:48:11

+0

它設置爲localhost:10.0 – oaimac 2010-12-15 15:24:16

回答

0

我需要使用的paramiko運行在另一個X11窗口中的GUI,發現了這個帖子。我想你可能需要添加幾行才能使其工作。這都是關於處理程序參數的。

這裏,爲傳入的X11連接分配一個函數。

chan.request_x11 (handler=testFunc()) 

然後寫一個簡單的。

import commands 
def testFunc(): 
    cmd = "xterm" 
    result = commands.getoutput(cmd) 

它應該在此之後彈出一個新窗口。至少它適合我。

+0

是的,它在Linux下工作。恭喜。感謝您的回答。 – oaimac 2012-02-13 16:42:54

+2

使用上面的代碼,'testFunc'是在本地執行的(請注意,它在'request_x11'之前調用,並且它的返回值被用作'handler'參數),所以它看起來似乎不正確。 – jcollado 2012-09-10 09:06:26

1

讀取paramiko代碼,我意識到paramiko只實現了一種方法來建立一個x11通道。它不會將通道連接到本地x11顯示器。這是留給你的。

請參閱這個答案如何做到這一點的工作示例:https://stackoverflow.com/a/12903844/72911