2011-03-01 48 views
0

我的工作要求我将我们的程序(也就是别人写的)从Windows移植到Linux。我已经能够成功运行Python脚本和Python脚本在Linux中调用的可执行程序。Python GUI不关闭子进程

的Python脚本创建GUI,和脚本使用下面的命令,当用户完成关闭GUI:

window.connect("destroy", self.close_application) 

这是在脚本的def __init__(self):部分。该GUI创建它调用可执行文件的过程如下:

MY_EXE = 'My_Program' 
EXE_ARGS = "-d -l" 
sh = MY_EXE + ' ' + EXE_ARGS 

self.proc = custom_popen.Popen('sh', std=custon_popen.PIPE, stdout=custom_popen.PIPE) 

的问题,我有是,Python脚本不会尝试当用户点击GUI上的关闭按钮关闭MY-。该脚本确实关闭了GUI。

所以,我的问题是如何链接用户选择关闭GUI到一个命令来关闭Python脚本中的My_Program进程?

任何帮助表示赞赏。另外,如果需要注意,脚本需要pygtk 2.0。

回答

0

外部程序是否从stdin读取然后退出?如果是这样,你的close_application方法调用self.proc.stdout.close()

如果外部程序没有自动退出(例如:读完输入或执行简单任务时),则可能需要使用Popen.close()(Python 2.6+)或os.kill()明确地将其终止。

+0

感谢您的回答,Marc。我的externel程序是一个航空电子设备的模拟器,所以它基本上是一直运行直到它被告知关闭。我已经看过了Popen.close()和os.kill()函数,我想我正在尝试与之沟通的是我对Python格式知之甚少,无法知道如何转换到Popen.close()命令捕获用户关闭GUI的操作。 – Jason 2011-03-01 19:04:46

+0

也许一个更好的方式说明它是externel可执行文件是用来运行的,直到用户关闭GUI。 GUI本身有一个框,用户可以点击该框并选择一个文件作为输入输入到可执行文件中。但是,当可执行文件没有任何新的数据输入时,它只是在他的套接字的另一端向他正在通信的人发送“我活着”状态。所以,我只需要将用户单击gui角落中的“x”的动作链接到我可以调用Popen.close()的地方。 – Jason 2011-03-01 19:25:17

+0

好的。我发现脚本在哪里调用关闭步骤,所以现在我需要知道如何正确关闭应用程序。我如何得到正确的孩子可执行文件的PID? – Jason 2011-03-01 23:20:13

0

我能用os.kill()函数成功杀死应用程序。所以,我认为这解决了我。