2014-04-22 55 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()本身並不需要知道如何獲得這個價值。您也可以在程序啓動後通過提示從配置文件或數據庫中加載它,或從直接用戶輸入中加載它。