Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单击:名称错误:名称未定义_Python_Command Line Interface_Python Click - Fatal编程技术网

Python 单击:名称错误:名称未定义

Python 单击:名称错误:名称未定义,python,command-line-interface,python-click,Python,Command Line Interface,Python 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 _

我试图使用
单击
将命令行参数传递给函数,但遇到了困难。我试图通过以下方式传递两个命令行参数:

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
我认为这与破折号和下划线有关,但删除破折号和下划线(仅使用
firsta
seconda
)也会出现同样的问题


我做错了什么?

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

您需要调用
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