обработка пустого (sys.argv [1]) - PullRequest
0 голосов
/ 06 марта 2019

Я пишу скрипт, который контролирует громкость.Имя сценария 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?

update: я исправил это с помощью пары ответов.Первое, что я делал неправильно, это тестировал len == 0, а не len == 1. sys.argv никогда не будет иметь len 0, потому что имя скрипта всегда [0].другая вещь заключалась в том, что я работал над sys.argv перед тестированием len - очевидно, что нет - нет.Кроме того, мой синтаксис был неправильным, должен был использовать (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 ]

1 голос
/ 06 марта 2019

sys.argv - это список, содержащий аргументы программы, с sys.argv[0], являющимся именем самого скрипта.

Способ подсчета количества аргументов - проверить длину * 1005.*, а не 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 голос
/ 06 марта 2019

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])
1 голос
/ 06 марта 2019

Вы можете попробовать использовать вместо этого.

len(sys.argv)
...