Использование sys.argv для получения различных функций - PullRequest
0 голосов
/ 29 июня 2018

Допустим, у меня есть следующие строки кода:

if __name__ == '__main__':
if '-h' in sys.argv:
    show_help()
elif '-f' or 'function'in sys.argv:
    print(function1)
elif '-n'or '-name' in sys.argv:
    print(function2)
elif '-e' or '-extension'in sys.argv:
    print(function3])
elif '-m' or '-missing'in sys.argv:
    print(function4)
elif 'r' or '-range' in sys.argv:
    print(function5)
else:
    exit

Буквы должны быть введены пользователем в терминале bash. Отображение метода справки работает, и он может показать все строки. Ввод -f работает и показывает содержимое, которое мне нужно в этой функции, однако код просто выплевывает содержимое из функции 1, а не из функции 2 и так далее.

Как мне получить эти разные буквы -f, -n, -e, -m (если они введены), чтобы выполнять эту функцию и выплевывать эту информацию? Также есть ли более эффективный способ сделать это без использования argparse для начинающего сценария Python?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я настоятельно рекомендую использовать argparse .

Если вы предпочитаете не делать этого, возможно создание словаря флагов:

flags = {
    '-h': show_help, 
    '-f': function1,
    '-function': function1,
    '-n': function2,
    '-name': function2,
    '-e': function3,
    '-extension': function3,
    '-m': function4,
    '-missing': function4,
    '-r': function5,
    '-range': function5,
}
if __name__ == '__main__':
    for flag in sys.argv:
        print(flags[flag])

Создав словарь, вы можете просто искать ключи.

В результате получается более чистый, быстрый и более понятный код.

0 голосов
/ 29 июня 2018

Чтобы проверить, есть ли в списке одно из двух значений, нельзя использовать оператор or с оператором in. Вам нужно проверить каждое значение отдельно, используя оператор in, например:

if '-h' in sys.argv:
    show_help()
elif '-f' in sys.argv or '-function' in sys.argv:
    print(function1)
elif '-n' in sys.argv or '-name' in sys.argv:
    print(function2)
elif '-e' in sys.argv or '-extension'in sys.argv:
    print(function3])
elif '-m' in sys.argv or '-missing'in sys.argv:
    print(function4)
elif '-r' in sys.argv or '-range' in sys.argv:
    print(function5)
else:
    exit
...