【问题标题】:How to know if a service is installed如何知道服务是否已安装
【发布时间】:2016-11-13 19:24:49
【问题描述】:

我正在寻找一种方法来检查是否安装了服务的 Python 脚本。例如,如果我想在命令行中检查已安装/运行/关闭的 SSH 服务器,我使用:

service sshd status

如果服务没有安装,我有这样的消息:

sshd.service
  Loaded: not-found (Reason: No such file or directory)
  Active: inactive (dead)

所以,我使用了一个子进程 check_output 来获取这三行,但 python 脚本无法正常工作。我使用 shell=True 来获取输出,但它不起作用。查找是否安装了服务或其他方法是否存在并且效率更高的正确解决方案?

这是我的python脚本:

import subprocess
from shlex import split

output = subprocess.check_output(split("service sshd status"), shell=True)

if "Loaded: not-found" in output:
    print "SSH server not installed"

此代码的问题是 subprocess.CalledProcessError: Command 返回非零退出状态 1。我知道那是命令行返回不存在但我在 shell 中编写命令时需要结果的时候

【问题讨论】:

标签: python service subprocess sshd


【解决方案1】:

抓住错误并避免shell=True:

import subprocess

try:
    output = subprocess.check_output(["service", "sshd", "status"], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print(e.output)
    print(e.returncode)

【讨论】:

  • 程序告诉我:命令'['service','shd','status']'返回非零退出状态3。它与shell命令不是同一行,我可以'不知道服务是否安装
  • 成功了,我忘了把stderr发送到stdout,输出会在e.output出错
【解决方案2】:

选择一些不同的systemctl 调用,这对于现有和非现有服务是不同的。例如

systemctl cat sshd

如果服务存在则返回退出代码0,否则返回1。而且应该很容易检查,不是吗?

【讨论】:

  • 我需要调整我的脚本,但即使服务停止,它也能正常工作。谢谢你!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多