如何知道是否安装了服务
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)
我正在寻找一种方法来检查 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)