下面是我正在使用的函数。当我调用spawnaputty会话命令时,它会完全冻结我的gui程序,直到我关闭putty会话。有没有办法绕过这个问题,让它调用命令,然后继续前进?(我传给司令部的还有更多,但我已经把它移走了,要把它清理干净。你知道吗
def SpawnSessionrmt(self,event):
if "SSH" in self.protormt:
subprocess.call('C:/bin/putty.exe ',shell=True)
elif "RDP" in self.protormt:
subprocess.call('C:/bin/rdp.exe)
else:
print "Not that you will see this...but that isn't a valid protocol"
问题是,正如the docs所说,
call
将:如果不想等待命令完成,请不要使用
call
。只需创建一个Popen
实例(理想情况下,稍后为它创建wait
,可能在退出时,或者在后台线程中)。你知道吗例如:
对于GUI应用程序,我认为最简单的方法可能是将
subprocess.call
放入后台线程。这样,您就可以在实际工作完成时更新GUI。你知道吗不幸的是,每个GUI框架都有不同的实现方式,有些允许您从任何线程执行GUI操作,有些具有
run_on_main_thread
功能,有些允许您将事件发布到主线程以由其事件循环拾取,有些要求您构建自己的线程间通信系统,等等,你没有告诉我们你在用哪个GUI框架。你知道吗下面是一个我随机挑选的框架的例子
wx
:(另外,我讨厌我的随机数生成器,因为我讨厌
wx
…但至少它没有选择Tkinter
,这会迫使我围绕Queue
或Condition
编写自己的跨线程通信。)相关问题 更多 >
编程相关推荐