我正在将shell脚本转换为python,我遇到了问题。当前脚本使用上次运行命令的结果,如此。
if [ $? -eq 0 ];
then
testPassed=$TRUE
else
testPassed=$FALSE
fi
我有if语句转换而不确定$?部分。因为我是python的新手,我想知道是否有类似的方法来做到这一点?
答案 0 :(得分:3)
您应该查看subprocess
模块。有一种check_call
方法可以查看退出代码(这是一种方法,还有其他方法)。如手册所述:
使用参数运行命令。等待命令完成。如果 返回代码为零然后返回,否则引发CalledProcessError。 CalledProcessError对象将具有返回码 returncode属性
这方面的一个例子是:
import subprocess
command=["ls", "-l"]
try:
exit_code=subprocess.check_call(command)
# Do something for successful execution here
print("Program run")
except subprocess.CalledProcessError as e:
print "Program exited with exit code", e.returncode
# Do something for error here
这也将包括输出,您可以将其重定向到文件或抑制如此:
import subprocess
import os
command=["ls", "-l"]
try:
exit_code=subprocess.check_call(command, stdout=open(os.devnull, "w"))
# Do something for successful execution here
print("Program run")
except subprocess.CalledProcessError as e:
print "Program exited with exit code", e.returncode
# Do something for error here
以下是使用非零退出代码的调用示例:
import subprocess
import os
command=["grep", "mystring", "/home/cwgem/testdir/test.txt"]
try:
exit_code=subprocess.check_call(command, stdout=open(os.devnull, "w"))
# Do something for successful execution here
print("Program run")
except subprocess.CalledProcessError as e:
print "Program exited with exit code", e.returncode
# Do something for error here
输出:
$ python process_exitcode_test.py
Program exited with exit code 1
作为您可以如上处理的例外捕获的。请注意,这不会处理拒绝访问或找不到文件等异常。您需要自己处理它们。
答案 1 :(得分:1)
您可能需要使用sh module。它使Python中的shell脚本更加愉快:
import sh
try:
output = sh.ls('/some/nen-existant/folder')
testPassed = True
except ErrorReturnCode:
testPassed = False