2014-04-22 54 views
0

访问argparse parse_args我有以下脚本:如何从另一个功能

#!/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 {} 

为什么ARGS字典没有得到在my_parse_args设置()函数?

+1

我想你正在寻找'全局参数'在两个函数的顶部。 'args = vars(parser.parse_args())'发生了什么事情是将某些东西分配给函数本地变量'args',而不是你在函数外声明的东西。 – 2rs2ts

回答

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()本身并不需要知道如何获得这个价值。您也可以在程序启动后通过提示从配置文件或数据库中加载它,或从直接用户输入中加载它。