Python检查shell命令的退出状态

时间:2015-01-19 17:24:05

标签: python subprocess exit-code

运行shell命令的#函数

def OSinfo(runthis):
        #Run the command in the OS
        osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
        #Grab the stdout
        theInfo = osstdout.stdout.read() #readline()
        #Remove the carriage return at the end of a 1 line result
        theInfo = str(theInfo).strip()
        #Return the result
        return theInfo

#flash raid firmware

OSinfo('MegaCli -adpfwflash -f ' + imagefile + ' -noverchk -a0')

#返回固件闪存状态

?

建议使用'subprocess.check_output()'的一个资源,但是,我不知道如何将其合并到函数OSinfo()中。

2 个答案:

答案 0 :(得分:9)

如果您只想return 1如果退出状态为非零,则使用check_call,任何非零退出状态都会引发我们捕获的错误return 1 else {{ 1}}将是osstdout

0

如果传递args列表,也不需要shell = True。

答案 1 :(得分:6)

不是使用osstdout.stdout.read()来获取子进程的stdout,而是使用osstout.communicate()这将阻塞,直到子进程终止。完成此操作后,将设置属性osstout.returncode,其中包含子流程的返回代码。

然后您的功能可以写成

def OSinfo(runthis):
    osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)

    theInfo = osstdout.communicate()[0].strip()

    return (theInfo, osstout.returncode)