2014-09-03 6 views
2

я заменил некоторые использование Python subprocess.Popen экземпляры с psutil.Popen экземпляров и ожидается поведение останется прежней.psutil/подпроцесс код возврата, когда процесс убит

В psutil документы для POPEN состояния:

Более удобный интерфейс для 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 не совсем такой же, как код выхода процесса, поскольку в POpen будет использоваться код -ve. Документах POPEN вполне очевидны, как, когда, что может/будет:

Ref документация: 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, то я думаю, что это, вероятно, ошибка/отсутствует функция.

Смежные вопросы