2010-12-15 29 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