Python 将值标记为警告或严重
我有一本字典如下(dict名为channel_info): 我试着在字典中循环,并报告警告或关键值。我必须为这个计划辩护Python 将值标记为警告或严重,python,dictionary,args,Python,Dictionary,Args,我有一本字典如下(dict名为channel_info): 我试着在字典中循环,并报告警告或关键值。我必须为这个计划辩护 parser.add_argument('-w', '--warning', type=int, help='Warning threshold', default=85) parser.add_argument('-c', '--critical', type=int, help='Critical threshold', default=95) 因此,基本上,当我运行像
parser.add_argument('-w', '--warning', type=int, help='Warning threshold', default=85)
parser.add_argument('-c', '--critical', type=int, help='Critical threshold', default=95)
因此,基本上,当我运行像myprog.py-w80-c90这样的程序时,我想要
flume02为临界值(在这种情况下,这将是唯一的输出)。如果任何其他键的值大于80或90,它们将分别报告为警告或严重
然而事实并非如此,我得到了临界值下的所有值
相关代码:
if args.warning and not args.critical:
for each in channel_info.items():
if float(each[1]) > float(args.warning):
print 'WARNING | {} is {} percent full'.format(*each)
exit(1)
if args.critical and not args.warning:
for each in channel_info.items():
if float(each[1]) > float(args.critical):
print 'CRITICAL | {} is {} percent full'.format(*each)
exit(2)
if args.warning and args.critical:
for each in channel_info.items():
if float(args.warning) < each[1] < float(args.critical):
print 'WARNING | {} is {} percent full'.format(*each)
elif each[1] > float(args.critical):
print 'CRITICAL | {} is {} percent full'.format(*each)
我将if设置为最后一个if条件(if args.warning和args.critical
),以确保程序能够使用1(-w
或-c
)或两个参数运行。如果您能帮我纠正错误,我们将不胜感激。我想您可能忘记了分支3上的浮动(每个[1])。i、 e.比较字符串和浮点
更有理由只格式化一次比较值,而不是每次都进行浮点运算(xyz)
threshold_crit = 90.0
threshold_warn = 80.0
for each in channel_info.items():
# value = float(each[1])
value = each[1]
if threshold_crit < value < threshold_warn:
print 'WARNING | {} is {} percent full'.format(*each)
elif value > threshold_crit:
print 'CRITICAL | {} is {} percent full'.format(*each)
将代码更改为:
value = float(each[1])
#value = each[1]
输出:
CRITICAL | flume02 is 98.94420000000001 percent full
CRITICAL | flume03 is 32.562999999999995 percent full
CRITICAL | flume01 is 2.15 percent full
CRITICAL | flume02 is 98.94420000000001 percent full
解决了。结果有两个问题
当我筋疲力尽时,我错过了花车
然而,-c
不能独立工作的主要问题是两个参数都有默认值,当我只使用-c
时,第一个if语句正在执行(因为有一个值,它等于true),所有值都被标记为警告
只是澄清一下。您是否只对警告/关键组合-W80-C90有问题,即。第三分店?-w 80和-c 90本身是否正常工作?另外,fwiw,您可以更快地将浮点(args)从循环中取出,还可以让您有机会打印出最终的结果。我们不知道频道信息
看起来是什么样子,因此很难判断。我的问题是,为什么您总是对每个[1]
进行比较?我认为您没有正确地遍历数据。添加一些你正在测试的值,以确保…如果我只做-w 80,我会得到所有高于80的值。但是,如果我使用-c 80,值仍然标记为warning@pedwards-channel_info是问题开始时发布的dict。困扰我的是,您正在使用python2中的print
,但在dict中重复,就像在使用python3一样。您使用的是哪个版本?您知道,您也可以通过使用argparse/optparse为crit和warning指定一个非常高的默认值来简化您的逻辑。比如,我不知道,99999999.99。这样,除非您实际输入该选项,否则检查将始终失败。检查critical>warning也有意义。如果你达到临界点,在第三个分支上继续-这样你就不会把进入标记为警告。是的,我刚刚添加了检查退出如果警告>暴击
value = float(each[1])
#value = each[1]
CRITICAL | flume02 is 98.94420000000001 percent full