点击:NameError:名称未定义

时间:2019-02-12 23:10:42

标签: python command-line-interface python-click

我正在尝试使用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

我认为这与破折号和下划线有关,但是删除破折号和下划线(仅使用firstaseconda)也因相同的问题而失败。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要不带任何参数地调用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

答案 1 :(得分:0)

您可以使用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)