How to determine subprocess.Popen() failed when shell=True

popen, python, subprocess

Solution

`returncode` will work, although it will be `None` until you've called `p.poll()`. `poll()` itself will return the error code, so you can just do

if a.poll() != 0:
    print ":("

Problem

Windows version of Python 2.6.4: Is there any way to determine if subprocess.Popen() fails when using shell=True? Popen() successfully fails when 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 ``` But when shell=True, there appears to be no way to determine if a Popen() call was successful or not. ``` >>> p = subprocess.Popen( 'Nonsense.application', shell=True ) >>> p >>> subprocess.Popen object at 0x0275FF90>>> >>> p.pid 6620 >>> p.returncode >>> ``` Ideas appreciated. Regards, Malcolm

Original source