2012-01-16 1 views
9

pythons argparse 모듈을 사용하여 cli 매개 변수 문자열을 구문 분석하고 싶습니다. 이 매개 변수는 터미널에서 전달되지만 지정된 문자열에서는 사용할 수 없습니다.미리 정의 된 인수 문자열을 사용하여 파이썬의 argparse를 사용할 수 있습니까?

~/someTestFile 
usage: argparsetest.py [-h] param 
argparsetest.py: error: unrecognized arguments: o m e T e s t F i l e 

~/someTestFile은 어떻게 든 o m e T e s t F i l e에서 변환 :이 스크립트를 실행하면

import argparse 

parser = argparse.ArgumentParser(description='Argparse Test script') 
parser.add_argument("param", help='some parameter') 

argString = 'someTestFile' 
print(argString) 

args = parser.parse_args(argString) 

나는이 출력을 얻을. 이미 언급했듯이 터미널에서 파일 이름을 전달하면 작동합니다.

나는이 문자열 인코딩 함께 할 수있는 뭔가가 상상할 수있다. 누군가이 문제를 해결하는 방법을 알고 있습니까?

+0

[argparse documentation] (http://docs.python.org/library/argparse.html#parsing-arguments)을 참조하십시오. –

답변

19

아, 아니요. parser.parse_args()sys.argv[1:]과 같은 형식의 시퀀스를 필요로합니다. sys.argv 시퀀스와 같은 문자열을 처리하면 ['s', 'o', 'm', 'e', 'T', 'e', 's', 't', 'F', 'i', 'l', 'e']이됩니다. 's'는 관련 인수가되고 나머지 문자열은 파싱 할 수 없습니다.

대신, 당신은 아마 그냥 기본 sys.argv처럼 parser.parse_args(['someTestFile'])

+0

감사! 그거였다…! – thorink

4

에 전달하려는 당신의 인수뿐만 아니라 목록을해야하는 목록입니다.

args = parser.parse_args([argString]) 
16

또 다른 옵션은 shlex.split입니다. 그것은 그것은 당신이 진짜 CLI 인수 문자열이있는 경우 특히 매우 편리합니다 :

import shlex 
argString = '-vvvv -c "yes" --foo bar --some_flag' 
args = parser.parse_args(shlex.split(argString)) 
+1

감사! 이것은 매우 유용합니다. 이제 다른 python 스크립트뿐만 아니라 명령 줄에서도 실행할 수 있습니다! – Sudhi

+0

누군가이 사람에게 쿠키를주세요. –

0

간단히 split 명령 문자열 :

args = parser.parse_args(argString.split()) 

완벽한 예 선보일 수 :

import argparse 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--dummy_opt', nargs='*', type=int, help='some ids') 
    argString = "--dummy_opt 128 128" 
    args = parser.parse_args(argString.split()) 

    print(args) 

출력됩니다 :

Namespace(pic_resize=[128, 128])

관련 문제