Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将值标记为警告或严重_Python_Dictionary_Args - Fatal编程技术网

Python 将值标记为警告或严重

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) 因此,基本上,当我运行像

我有一本字典如下(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)
因此,基本上,当我运行像
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