我正在编写一个控制音量的脚本。脚本的名称为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
感谢所有提供帮助的人。我想我需要所有三个答案来解决它。
答案 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])