处理空(sys.argv [1])

问题描述 投票:0回答:3

我正在编写一个控制音量的脚本。脚本的名称是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

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

python parameter-passing
3个回答
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

1
投票

您可以尝试使用而不是那样。

len(sys.argv)

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])
© www.soinside.com 2019 - 2024. All rights reserved.