我试图通过简单的子进程调用来检查apache服务的状态,但是脚本一直返回"非零退出状态3"错误。当apache服务运行时,我得到了我正在寻找的结果。仅当apache服务未运行时才会发生此错误。我已经在下面添加了简单的脚本。
你们有什么建议我做的故障排除试图解决这个问题?谢谢!
import subprocess
from shlex import split
subprocess.check_output(split("services apache2 status"))
答案 0 :(得分:0)
子进程在您的情况下工作得很好:
请注意check_output
函数将首先检查命令退出代码。如果退出代码不为0,则会引发CalledProcessError Refer here。
对于您的情况,如果apache2没有运行,service apache2 status
的退出代码将只提供退出代码3.
您可以在终端中检查命令的退出代码,只需输入" echo $?
"按照那个命令。
例如: 如果apache2没有运行,请输入" service apache2 status"在终端并执行命令,然后输入" echo $?",您将获得退出代码3。
如果您只想获得命令" service apache2 status"的输出,我建议您添加" shell = True
" args,请参考:link doc。
e.g。
subprocess.check_output(split(" services apache2 status"),shell = 真)
但要小心这个args,只有在你想获得输出时才使用它。
答案 1 :(得分:0)
这是subprocess.check_output
的预期行为。如果调用的进程未返回退出代码0,则会引发CalledProcessError
异常。
如果希望脚本继续运行,则需要处理异常,例如:
try:
subprocess.check_output(split("services apache2 status"))
except subprocess.CalledProcessError as e:
print("subprocess failed with return code {}".format(e.returncode))