我的上一个问题也是一样的,但没有得到适当的建议,所以我再问一次。
我有一个将连接到ssh的GUI。在连接到ssh之后我无法做任何事情,所以我必须通过脚本打开新的终端执行其他操作(显示相应的输出)在新的终端'。
现在我可以使用子进程打开新窗口但是它不从GUI采取任何操作可能是代码问题。请帮我解决我的问题。
我正在为后端使用python和shell脚本,为GUI使用wxpython。
注意:我正在寻找使用Python和shell脚本的解决方案。
我的代码是:
import time
import sys
import pexpect
c = pexpect.spawn("ssh -Y -L xxxx:localhost:xxxx user @ host.com")
time.sleep(0.1)
c.expect("[pP]aasword")
c.sendline("xxxxxx")
sub = subprocess.call("xfce4-terminal")
if sub:
subprocess.call("svn update",shell=True)
time.sleep(0.2)
c.interact()
c.pexpect([user@host.com~]$)
# here after its connects to ssh then command wont be executed
c.sendline("xfce4-terminal")
在GUI中我有一个按钮" APPLY"和5个单选按钮。我可以一次选择1个单选按钮,并且必须单击按钮" APPLY"。然后它连接到ssh隧道并执行请求的操作。现在它在连接到ssh_tunnel后不允许进行任何操作。
答案 0 :(得分:0)
您看到的实际问题是如何在运行ssh
时避免阻止GUI事件循环。
有两种主要方法可以解决它:
在后台线程中运行ssh
并使用an appropriate for your GUI framework method of communicating with the main GUI thread报告结果。
异步运行ssh
并订阅其I / O事件。这是an example for gtk framework。