2011-03-01 54 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()函數成功殺死應用程序。所以,我認爲這解決了我。