【问题标题】:Python test if client existPython测试客户端是否存在
【发布时间】:2015-02-21 16:00:15
【问题描述】:

我是 python 新手,正在尝试制作一个脚本来检查指定主机是否存在,例如 sensu-client。我使用一个名为 NSO 的部署软件并通过以下方式运行它:nso status,它会向我显示以下信息:

nagios-client host nagios-client down
test host test down

是否有可能制作一个脚本来检查例如 nagios-Client 是否与脚本一起存在?

在 shell 中我这样做:

nso status | awk '{ print $1 }'

【问题讨论】:

  • 我不确定你在问什么。您能否详细说明您遇到的问题?

标签: python shell python-2.7


【解决方案1】:

在这种情况下,我建议使用 subprocess 的 check_output 函数。文档是here。 check_output 可以以字符串形式返回命令的 shell 输出。所以你会有这样的东西:

import subprocess
foo=subprocess.check_output(['nso', 'status', '|', 'awk', '\'{ print $1 }\''], shell=True) 
#Thanks bereal for shell=True
print foo

当然,如果您只针对 linux,您可以使用更简单的sh module。它允许您像导入库一样导入程序。

【讨论】:

  • 您需要添加 shell=True 才能使此管道正常工作。
【解决方案2】:

您可以使用 subprocess 运行此命令并解析输出

import subprocess
command = ['nso', 'status', '|', 'awk', '\'{ print $1 }\'']
p1 = subprocess.Popen(command, stdout=subprocess.PIPE)

【讨论】:

  • 这不会产生预期的结果,您在代码中从command 更改为first,所以您应该选择一个,否则会抛出错误
【解决方案3】:

您不必运行 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')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多