Нажмите: NameError: имя не определено - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь использовать click для передачи аргументов командной строки в функцию, но возникают трудности.Я пытаюсь передать два аргумента командной строки с этим:

python script.py --first-a hi --second-a there

Вот моя попытка:

import click
@click.command()
@click.option("--first-a")
@click.option("--second-a")
def main(first_a, second_a):
    print first_a, second_a

if __name__ == "__main__":
    main(first_a, first_a)

Это не с:

NameError: name 'first_a' is not defined

IЯ думал, что это связано с черточками и подчеркиваниями, но удаление черточек и подчеркиваний (просто с помощью firsta и seconda) также приводит к ошибке с той же проблемой.

Что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вам необходимо вызвать main() либо без каких-либо аргументов, либо со списком параметров, которые обычно можно найти в sys.argv.

Код:

if __name__ == "__main__":
    main()

Тестовый код:

import click

@click.command()
@click.option("--first-a")
@click.option("--second-a")
def main(first_a, second_a):
    print(first_a, second_a)

if __name__ == "__main__":
    # test code
    import sys
    sys.argv[1:] = ['--first-a', 'hi', '--second-a', 'there']

    # actual call to click command
    main()

Результаты:

hi there
0 голосов
/ 13 февраля 2019

Вы можете использовать argparse для разбора параметров командной строки:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--first-a', dest='first_a')
    parser.add_argument('--second-a', dest='second_a')
    args = parser.parse_args()
    main(args.first_a, args.second_a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...