我很難從python子進程模塊中獲得我想要的東西(應該是統一/平臺無關的抽象,afaik,但不要讓我開始吧:))。python subprocess with shell = True:重定向和平臺無關的子進程查殺
所以我簡單的事情是以下。我想
- 啓動外部(標準輸入輸出)應用程序(可能具有子過程),其中,我使用殼式重定向(如「./myapp> stdout_log> stderr_log」)
- 基本上我想執行shell命令行,所以我必須指定殼=真爲subprocess.Popen()(或者在命令行重定向將不會工作)
- 我想發動這個命令行以異步的方式(所以它作爲一個獨立的子進程運行,但我的python proc ess不會等待它完成)
- (我的父級python進程會不時地查看子進程的日誌以提取信息,但這與問題無關)
- 如果我的父級python進程決定,它應該能夠終止這個子進程。
現在,我的主要問題是
- 我基本上被迫使用殼=真,得到重定向工作
- 父蟒蛇處理孩子的標準輸出/標準錯誤進程不是一個選項,因爲我找不到以非等待方式執行的功能(並且父級python進程必須在孩子運行時做其他事情)
- 如果我使用殼=真然後subprocess.kill()將只終止
- 我需要的是在任何平臺上工作的可靠的子進程的終止方法(但至少Linux和Windows)
我希望我足夠具體。感謝提前任何提示/提示 - 我只是花了一整天的子過程,恕我直言它是
痛苦
遠離平臺無關或簡單:(但也許它只是我)
更新(2010年-10-13):
如果啓動一個子進程(即使外殼= FALSE),那麼subprocess.Popen.kill()函數將只殺死子進程(所以,如果有任何「孫子「流程,他們不會被終止)
我讀到有關使用preexec_fn參數設置所有的子進程的SID,但它僅限Unix:timeout a subprocess
相關:[如何終止與shell = True啓動的python子進程](http://stackoverflow.com/q/4789837/95735) – 2012-10-18 23:11:15