如何从另一个函数访问argparse parse_args

时间:2014-04-22 16:55:25

标签: python argparse

我有以下脚本:

#!/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字典?

1 个答案:

答案 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()本身不必知道如何获取该值。您也可以在程序启动后从配置文件或数据库或直接用户输入加载它。