我正在编写一个控制音量的脚本。脚本的名称是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
感谢所有帮助过的人。我想我需要三个答案来解决它。
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
您可以尝试使用而不是那样。
len(sys.argv)
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])