2013-09-16 23 views
1

我使用子进程调用从python脚本调用可执行文件。这些是以下代码我已经使用:如何在python中获取返回状态

try: 
    p = subprocess.Popen([abc.exe], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 

except Exception as e: 
    print str(e) 

从abc.exe,我已经在故障情况下返回1和对成功的情况下返回0。但我不知道如何检查python脚本的返回值。

感谢,

+3

此代码有两个问题: 1.您忘记了'abc.exe'的引号,这会导致为不存在的变量'abc'引发NameError。2.您正在捕获异常,它会捕获NameError。你应该只捕捉OSError。 –

回答

1

您保存为p.communicate()的输出,而不是Popen对象。也许尝试:

try: 
    p = subprocess.Popen(['abc.exe'], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

except OSError as e: 
    print str(e) 

stdoutdata, stderrdata = p.communicate() 
retcode = p.returncode 
1

另一种方法是使用subprocess.check_output(),因为你提到了Python 2.7。这将以与Popen相同的参数运行该命令。该命令的输出以字符串形式返回。如果该命令返回非零值,则会引发subprocess.CalledProcessError异常。

所以我认为你可以返工您的代码是这样的:

try: 
    output = subprocess.check_output(['abc.exe'], shell=True, stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as ex: 
    # an error occurred 
    retcode = ex.returncode 
    output = ex.output 
else: 
    # no error occurred 
    process(output) 

注意,因为它是内部使用,不能使用的stdout论点check_output。这里是docs

相关问题