Как определить подпроцесс. Popen () перестал работать когда shell=True

Версия Windows Python 2.6.4: Есть ли любой способ определить если подпроцесс. Popen () перестал работать при использовании shell=True?

Popen () успешно перестал работать когда shell=False

>>> import subprocess
>>> p = subprocess.Popen( 'Nonsense.application', shell=False )
Traceback (most recent call last):
  File ">>> pyshell#258", line 1, in <module>
    p = subprocess.Popen( 'Nonsense.application' )
  File "C:\Python26\lib\subprocess.py", line 621, in __init__
    errread, errwrite)
  File "C:\Python26\lib\subprocess.py", line 830, in
_execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

Но когда shell=True, там, кажется, не способ определить, был ли Popen () вызов успешен или нет.

>>> p = subprocess.Popen( 'Nonsense.application', shell=True )
>>> p
>>> subprocess.Popen object at 0x0275FF90>>>
>>> p.pid
6620
>>> p.returncode
>>>

Идеи ценятся.

С уважением, Malcolm

7
задан Michael Krelin - hacker 18 May 2010 в 22:33
поделиться

2 ответа

код возврата будет работать, хотя он будет Нет , пока вы не вызовете p.poll () . poll () сам вернет код ошибки, так что вы можете просто сделать

if a.poll() != 0:
    print ":("
15
ответ дан 6 December 2019 в 09:18
поделиться

В первом случае он не запускается, во втором - успешно запускает shell, который, в свою очередь, не выполняет приложение. Итак, ваш процесс был правильно порожден, завершен и ждет, когда вы поинтересуетесь его кодом завершения. Итак, дело в том, что если только ваша оболочка или окружение (например, нет памяти) не полностью сломаны, то нет никакого способа Popen сам может потерпеть неудачу.

Поэтому вы можете смело .poll() и .wait() на него, чтобы узнать все печальные новости.

5
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: