2016-10-25 2 views
0

나는 파이썬 스크립트 script_A을 가지고 있으며 main에 다른 파일의 다른 파이썬 함수를 호출합니다.파이썬 스크립트에 대한 모든 인수를 함수에 전파하는 가장 좋은 방법

script_A은 다음과 같이 호출됩니다 : 내가 가지고있는

script_A --option1 "foo" --option2 "hoo" 

script_A 내부 : 나는 실제로 인수를 구문 분석하지 않고 func_Bscript_A에 전달 된 모든 인수를 전달하려는

if __name__ == "__main__": 
    # call another function `func_B` defined in a different file 

.

argparsefunc_B 안에 사용하고 싶습니다.

가장 좋은 방법은 무엇입니까?

+0

argpsese는 기본적으로'sys.argv'를 구문 분석합니다. 호출 스택의 어느 위치에서나 사용할 수 있습니다. 'import sys'만으로 직접 검사 할 수 있습니다. – hpaulj

답변

1

내장 모듈 sys을 사용하여 인수 목록을 가져옵니다. 그럼 네가 원하는 걸해라. , 즉시 스크립트가 실행됩니다, 당신은 (첫 번째 항목은 스크립트의 이름입니다) 공백으로 분리 목록 (sys.argv)에 인수를 얻을거야 마음에

import sys 

print(sys.argv) 
0

계속 '왜 이렇게 초기 문자열 "당연히"를 얻지는 않을 것입니다. 염두에두고

은, 그러나, 당신이 뭔가를 할 수 있습니다 :

mod1.py :

import sys 
from mod2 import foo 


if __name__ == "__main__": 
    foo(sys.argv[1:]) # To remove the script's name, which is always the first argument 

그리고

이 같은 파일에 __main__ 되세요 다른 모듈 (이 예제에서는 mod2.py)에서 argparser를 다음과 같이 실행하십시오.

mod2.py : $ python ./mod1.py --foo bar1 bar2 --baz 1을 실행

import argparse 


def make_parser(): 
    parser = argparse.ArgumentParser(description='Process some foos.') 
    parser.add_argument('--foo', type=str, nargs='+', help='a foo',) 
    parser.add_argument('--baz', type=str, help='a baz') 
    return parser 


def foo(args): 
    parser = make_parser() 
    parsed_args = parser.parse_args(args) 
    print "Got me some foos: %s" % (parsed_args.foo) 
    print "And a baz: %s" % (parsed_args.baz) 

이 될 것입니다 :

$ python ./mod1.py --foo bar1 bar2 --baz 1 
Got me some foos: ['bar1', 'bar2'] 
And a baz: 1 
+0

sys.argv [1 :]은 항상 유효합니까? 인수가없는 경우 예외를 throw 할 수 있습니까? 인수없이 시도했지만 괜찮 았지만 확실히하고 싶었습니다. – sh0731

+0

명령 줄에서 호출하는 한, 그렇습니다. 인수를 전달하지 않더라도 스크립트의 이름은 항상 하나입니다. 스스로 시도 할 수 있습니다 :'foo (sys.argv [1 :])'(또는'if __name__ == "__main __":') 바로 다음에'print sys.argv'를 추가하고 재생하십시오 조금 **:-)** – BorrajaX

0

그냥 당신이 script_A에서 그것을 사용했을 func_B 정확히 방법으로 argparse를 사용합니다. 잘 될거야. argparse과 같은 명령 줄 인수 및 명령 줄 인수 구문 분석 도구는 현재 파일이 무엇인지 신경 쓰지 않습니다.

관련 문제