如何知道是否安装了服务

How to know if a service is installed

我正在寻找一种方法来检查 Python 脚本是否安装了服务。例如,如果我想在命令行中检查 installed/running/down 中的 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:命令 returned 非零退出状态 1。我知道那是命令行 return 不存在的东西但是我在 shell

中编写命令时需要结果

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

systemctl cat sshd
如果服务存在,

将 return 退出代码 0,否则将 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)