Python测试是否存在客户端

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 }' 可以使用子流程运行此命令并分

我是python新手,正在尝试制作一个脚本来检查指定的主机(例如sensu客户端)是否存在。我使用一个名为NSO的部署软件,并通过以下方式运行它:
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
,此管道才能工作。