我有以下脚本:
#!/usr/bin/env python
import argparse
args = {}
def do_something():
print 'from do_something ', args
def my_parse_args():
parser = argparse.ArgumentParser(description='A demo script')
parser.add_argument('arg1', help='an arg')
args = vars(parser.parse_args())
print 'from my_parse_args ', args
if __name__=="__main__":
my_parse_args()
do_something()
我试图从do_something()函数访问args。但是,我得到以下内容:
python demo.py example
from my_parse_args {'arg1': 'example'}
from do_something {}
为什么没有在my_parse_args()函数中设置args字典?
答案 0 :(得分:4)
你返回你的函数的解析结果,所以你可以把它传递给其他东西:
def do_something(args):
print 'from do_something ', args
def my_parse_args():
parser = argparse.ArgumentParser(description='A demo script')
parser.add_argument('arg1', help='an arg')
return vars(parser.parse_args())
if __name__=="__main__":
args = my_parse_args()
do_something(args)
一般来说,你会选择do_something()
需要的论点并将其传递出来;这样,do_something()
函数也可以被其他代码使用:
def do_something(foo):
print 'from do_something', foo
和
if __name__=="__main__":
args = my_parse_args()
do_something(args['arg1'])
此处do_something()
由命令行参数arg1
值驱动,但do_something()
本身不必知道如何获取该值。您也可以在程序启动后从配置文件或数据库或直接用户输入加载它。