仅在未启动服务时出现子进程签出错误

时间:2015-05-29 01:06:32

标签: python

我试图通过简单的子进程调用来检查apache服务的状态,但是脚本一直返回"非零退出状态3"错误。当apache服务运行时,我得到了我正在寻找的结果。仅当apache服务未运行时才会发生此错误。我已经在下面添加了简单的脚本。

你们有什么建议我做的故障排除试图解决这个问题?谢谢!

import subprocess
from shlex import split

subprocess.check_output(split("services apache2 status"))

2 个答案:

答案 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))