处理空(sys.argv [1])

时间:2019-03-06 06:16:16

标签: python parameter-passing

我正在编写一个控制音量的脚本。脚本的名称为vv,并且需要一个参数。例如vv .9,其中.9是您要设置音量的级别。该程序按预期工作,但是我想对其进行更改,以便如果省略该参数,它将输出当前的音量级别。我试图用这种方式写。

import sys 
vol = float(sys.argv[1])

if len(sys.argv[1]) == 0:
    print(round(volume.value_flat, 2)) 
    exit(0)

else:
    run the rest of the program

我也尝试过这种方式:

if (sys.argv[1]) == '':
这两种方式均失败。我想如果sys.argv没有得到它的参数,即使您专门测试没有参数,它也不会运行程序。有没有不用argparse的更好方法吗?

更新:我在几个答案的帮助下解决了这个问题。我做错的第一件事是测试len == 0而不是len ==1。sys.argv永远不会有len为0,因为脚本名称始终为[0]。另一件事是我在测试len之前正在sys.argv上工作-显然,这是不-不。另外,我的语法错误,应该使用(sys.argv)而不是(sys.argv [1])。

这是更新的代码:

if len(sys.argv) == 1:
    with Pulse('volume-example') as pulse:
        sink_input = pulse.sink_input_list()[0] 
        volume = sink_input.volume
        print('current level:','\t', round(volume.value_flat, 2)) 
        exit(0)

 else:
    vol = float(sys.argv[1]) # this line had to be moved to after len was checked

感谢所有提供帮助的人。我想我需要所有三个答案来解决它。

3 个答案:

答案 0 :(得分:1)

您可以尝试代替使用。

len(sys.argv)

答案 1 :(得分:1)

sys.argv是一个包含程序参数的列表,其中sys.argv[0]是脚本本身的名称。

计算有多少个参数的方法是检查sys.argv的长度,而不是sys.argv[1]的长度。
您还需要在尝试访问sys.argv[1]之前执行此操作,因为它可能不存在:

import sys 

if len(sys.argv) < 2:
    print(round(volume.value_flat, 2)) 
    exit(0)

vol = float(sys.argv[1])

# run the rest of the program

答案 2 :(得分:1)

sys.argv提供了命令行提供的参数列表。该列表包括正在运行的脚本以及任何其他参数。如果您提供参数,而['vv.py','optional_argument']不提供参数,则看起来像['vv.py']

import sys     

#Check for volume level input
if len(sys.argv) == 1:
    print(round(volume.value_flat, 2)) 
    exit(0)

#Continue running since exit() wasn't executed
vol = float(sys.argv[1])