2012-01-31 17 views
5

argparse를 사용하여 알고있는 인수를 구문 분석하고 나머지는 그대로 둡니다. 예를 들어 나는 -o 옵션을 사용하고 나머지는 그대로 잎인수를 argparse로 그대로 두십시오.

performance -o output other_script.py -a opt1 -b opt2 

을 실행할 수 있어야합니다.

모듈 profiler.py은 optparse의와 비슷한 일을하지만, 내가 argparse 사용하고 있기 때문에 내가하고 있어요 : 또한 또한 other_script.py 또한 경우 발생하는 작동하는 것 같다,하지만

def parse_arguments(): 
    parser = new_argument_parser('show the performance of the given run script') 
    parser.add_argument('-o', '--output', default='profiled.prof') 

    return parser.parse_known_args() 

def main(): 
    progname = sys.argv[1] 
    ns, other_args = parse_arguments() 
    sys.argv[:] = other_args 

-o 플래그가 있습니까?

일반적으로이 문제를 해결하는 더 좋은 방법이 있습니까?

답변

5

argparse은 EOF 또는 --까지 인수를 구문 분석하기 위해 중지됩니다. 당신이 argparse에 의해 구문 분석에 beeing없이 인수를 원한다면, 당신은 쓸 수 있습니다 :

python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE] 
+0

아 감사합니다. 마커가 없다면 사실상 argparse가 무슨 일이 벌어지고 있는지 이해하는 것은 매우 어려울 것입니다. 쉬운 문제는 아닙니다 .. –

+0

적어도 parthon3에서'parse_known_args()'메소드를 사용해야한다는 것을 분명히해야합니다. 6) – krishonadish

12

또한, nargs=argparse.REMAINDER으로 파서에 위치 인수를 추가 할 수있는 스크립트와 해당 옵션 캡처 :

# In script 'performance'... 
p = argparse.ArgumentParser() 
p.add_argument("-o") 
p.add_argument("command", nargs=argparse.REMAINDER) 
args = p.parse_args() 
print args 

위의 최소 스크립트 실행 중 ...

$ performance -o output other_script.py -a opt1 -b opt2 
Namespace(command=['performance', '-a', 'opt1', '-b', 'opt2'], o='output') 
+1

또한'parse_known_args'가 이것을해야합니다. –

+0

이것은'-'을 그대로 유지하는 것처럼 보입니다. 완전한! – user1338062

관련 문제