2014-09-03 64 views
2

我替換了一些Python的使用subprocess.Popen實例與psutil.Popen實例,並預期行爲保持不變。psutil/subprocess return process code when process killed

爲POPEN狀態psutil文檔:

的更方便的接口STDLIB subprocess.Popen。它啓動一個子進程並完全按照使用subprocess.Popen進行處理,但此外它還在單個接口中提供了psutil.Process類的所有方法。

我發現終止進程時的返回碼是不一樣的,如下面的示例所示。

>>> import subprocess 
>>> p = subprocess.Popen('sleep 100', shell=True) 
>>> p.kill() 
>>> p.wait() 
-9 
>>> 
>>> import psutil 
>>> p = psutil.Popen('sleep 100', shell=True) 
>>> p.kill() 
>>> p.wait() 
9 
>>> 
>>> print sys.version 
2.7.3 (default, Aug 28 2012, 13:02:46) 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] 
>>> print psutil.__version__ 
2.1.1 

當進程終止時POSIX對退出代碼的保證是什麼?上述兩個返回碼都有效嗎?

回答

1

POSIX退出代碼的值爲0-255。 POpen的retcode與進程的退出代碼並不完全相同,因爲POpen將會使用-ve代碼。該POPEN文檔是相當明確的,至於何時能夠/會發生:

參考文獻:https://docs.python.org/2/library/subprocess.html#subprocess.Popen.returncode 參考這個問題How to get exit code when using Python subprocess communicate method?

然而,psutil文檔不提,在所有: https://code.google.com/p/psutil/wiki/Documentation#Classes(見wait(timeout=None)部分)。

我猜這是'正確'的爭論,但如果psutil應該遵循與POpen相同的接口,那麼我認爲這可能是一個缺陷/缺失功能。