【问题标题】:Nagios python script wait for executionNagios python脚本等待执行
【发布时间】:2019-09-16 19:18:31
【问题描述】:

我有这个由 nagios 运行的脚本,它检查提供程序 API 是否启用了缓解并报告回来。我只是从 Nagios 复制了一个示例,我没有任何 Python 知识。问题是有时脚本需要 10 秒才能运行,而 python 只是继续,所以我需要它等待执行。

我发现了一些使用子进程的成功示例,但我不知道如何将 .readline 和 .strip 添加到命令中。

这是原始脚本:

#!/usr/bin/python
import os, sys
mitigation_enabled=os.popen("/usr/local/nagios/libexec/check_mitigation.py 
| grep auto | awk '{print $2}'").readline().strip()

if mitigation_enabled == "false":
    print "OK - Mitigation disabled." .format (mitigation_enabled)
    sys.exit(0)
elif mitigation_enabled == "true":
    print "WARNING - Mitigation enabled." .format (mitigation_enabled)
    sys.exit(1)
else:
    print "UKNOWN - mitigation status unknown." .format (mitigation_enabled)
    sys.exit(2)

那么我该如何使用子进程,等待外部脚本的执行并添加 .readline 和 .strip 值?

简短的问题,如何使这项工作:)

谢谢!

【问题讨论】:

  • 为什么两个 Python 版本都标记了这个问题?

标签: python python-3.x python-2.7 subprocess


【解决方案1】:

您抱怨古老的 API 允许零字节的“短读取”。 是的,没错,它按设计工作。

推荐你直接使用subprocess

另外,关于awk '{print $2}' 的两个尼特:

  1. 通过调用awk '/auto/ {print $2}'删除grep
  2. 使用split() 删除awk 子节点的开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2017-06-16
    • 2016-09-13
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多