如何从其他函数访问argparse的parse_args

0 投票
1 回答
2273 浏览
提问于 2025-04-18 03:47

我有一个这样的脚本:

#!/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() 这个函数里获取一些参数。但是,我得到了以下内容:

python demo.py example
from my_parse_args  {'arg1': 'example'}
from do_something  {}

为什么在 my_parse_args() 这个函数里,args 字典没有被设置呢?

1 个回答

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()本身并不需要知道这个值是怎么得到的。你也可以从配置文件、数据库,或者在程序启动后直接通过用户输入来加载这个值。

撰写回答