Python测试是否存在客户端
我是python新手,正在尝试制作一个脚本来检查指定的主机(例如sensu客户端)是否存在。我使用一个名为NSO的部署软件,并通过以下方式运行它:Python测试是否存在客户端,python,shell,python-2.7,Python,Shell,Python 2.7,我是python新手,正在尝试制作一个脚本来检查指定的主机(例如sensu客户端)是否存在。我使用一个名为NSO的部署软件,并通过以下方式运行它:NSO status,它向我显示以下信息: nagios-client host nagios-client down test host test down 是否有可能制作一个脚本来检查nagios客户端是否存在脚本 在shell中,我通过以下方式实现: nso status | awk '{ print $1 }' 可以使用子流程运行此命令并分
NSO status
,它向我显示以下信息:
nagios-client host nagios-client down
test host test down
是否有可能制作一个脚本来检查nagios客户端是否存在脚本
在shell中,我通过以下方式实现:
nso status | awk '{ print $1 }'
可以使用子流程运行此命令并分析输出
import subprocess
command = ['nso', 'status', '|', 'awk', '\'{ print $1 }\'']
p1 = subprocess.Popen(command, stdout=subprocess.PIPE)
在这种情况下,我建议使用subprocess的check_输出函数。文件是。check_输出可以以字符串形式返回命令的shell输出。所以你会有这样的想法:
import subprocess
foo=subprocess.check_output(['nso', 'status', '|', 'awk', '\'{ print $1 }\''], shell=True)
#Thanks bereal for shell=True
print foo
当然,如果您只针对linux,您可以使用更简单的。它允许您像导入库一样导入程序。您不必运行
awk
,因为您已经使用Python:
import subprocess
proc = subprocess.Popen(['nso', 'status'], stdout=subprocess.PIPE)
# get stdout as a EOL-separated string, ignore stderr for now
out, _ = proc.communicate()
# parse the output, line.split()[0] is awk's $1
items = [line.split()[0] for line in out.split('\n')]
我不知道你在问什么。您能详细说明您遇到的问题吗?这不会产生期望的结果,您在代码中从
命令更改为第一个,因此您可能应该选择一个,否则它将抛出一个错误。您需要添加shell=True
,此管道才能工作。