Python 检查 shell 命令的退出状态
Python check exit status of a shell command
# 函数到 运行 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
# 闪存 raid 固件
OSinfo('MegaCli -adpfwflash -f ' + imagefile + ' -noverchk -a0')
# return 固件闪存的状态
?
推荐使用 'subprocess.check_output()' 的一个资源,但是,我不确定如何将其合并到函数 OSinfo() 中。
您可以使用 osstout.communicate()
而不是使用 osstdout.stdout.read()
来获取子进程的 stdout
这将阻塞直到子进程终止。完成后,属性 osstout.returncode
将被设置为包含子进程的 return 代码。
你的函数可以写成
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)
如果您只想 return 1
如果存在非零退出状态,请使用 check_call
,任何非零退出状态都会引发我们捕获的错误,并且 return 1
否则osstdout
将是 0
:
import subprocess
def OSinfo(runthis):
try:
osstdout = subprocess.check_call(runthis.split())
except subprocess.CalledProcessError:
return 1
return osstdout
如果传递参数列表,也不需要 shell=True。
# 函数到 运行 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
# 闪存 raid 固件
OSinfo('MegaCli -adpfwflash -f ' + imagefile + ' -noverchk -a0')
# return 固件闪存的状态
?
推荐使用 'subprocess.check_output()' 的一个资源,但是,我不确定如何将其合并到函数 OSinfo() 中。
您可以使用 osstout.communicate()
而不是使用 osstdout.stdout.read()
来获取子进程的 stdout
这将阻塞直到子进程终止。完成后,属性 osstout.returncode
将被设置为包含子进程的 return 代码。
你的函数可以写成
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)
如果您只想 return 1
如果存在非零退出状态,请使用 check_call
,任何非零退出状态都会引发我们捕获的错误,并且 return 1
否则osstdout
将是 0
:
import subprocess
def OSinfo(runthis):
try:
osstdout = subprocess.check_call(runthis.split())
except subprocess.CalledProcessError:
return 1
return osstdout
如果传递参数列表,也不需要 shell=True。