2014-04-22 1 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에서 인수에 액세스하기 위해 노력하고 있습니다. 하지만 다음과 같은 결과를 얻었습니다 :

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

왜 args 사전은 my_parse_args() 함수에서 설정되지 않고 있습니까?

+1

나는 두 함수의 상단에'global args'를 찾고 있다고 생각합니다. '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() 자체는 알 필요가 없습니다 그 가치가 얻은 방법. 또한 프로그램을 시작한 후 프롬프트에서 구성 파일이나 데이터베이스 또는 직접 사용자 입력에서로드 할 수도 있습니다.