进程终止时,psutil / subprocess返回代码

时间:2014-09-03 08:22:47

标签: python psutil

我用 psutil.Popen 实例替换了一些Python subprocess.Popen 实例的使用,并期望行为保持不变。

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保证是什么?以上返回代码是否有效?

2 个答案:

答案 0 :(得分: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一样,那么我认为这可能是一个错误/缺失的功能。

答案 1 :(得分:1)

这是psutil中的一个错误,我现在修复了这个错误:https://github.com/giampaolo/psutil/issues/960