Click: NameError: name not defined
Click: NameError: name not defined
我正在尝试使用 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
我认为这与破折号和下划线有关,但删除破折号和下划线(仅使用 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
我正在尝试使用 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
我认为这与破折号和下划线有关,但删除破折号和下划线(仅使用 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