2012-02-03 2 views
1

에 대한 인수를 구문 분석 할 수 있습니다 (예 : --a, --b, --c) 한 무리의 옵션이있는 파이썬 프로그램에 대한 명령 줄 인터페이스가 있지만 다른 스위치와 명령 사이를 전환합니다.및 이상한 명령 줄 인터페이스

따라서 prog -S a b c-S 동작을 호출하고 prog -Y a b c-Y 동작을 호출합니다. prog -Y a b c --a=2 --b=3, 다음,

cargparse 또는 getopt 나를 위해 구문 분석 인수를 할 수 있도록 어떤 방법이 있나요, 매개 변수 ab 및 위치 인수 a, b-Y 조치를 호출해야합니까? 이 일을 훌륭하게 수행 할 수있는 다른 도서관이 있습니까?

답변

3

나는 argparse의 subcommands을 사용하면이 경우에 유용하다고 생각합니다.

기본적으로 몇 가지 일반적인 일반 옵션과 함께 하위 명령의 구문 분석을 처리 한 다음 기본 옵션으로 파싱 된 특정 옵션의 구문 분석을 담당하는 몇 개의 서브 파서 (각 하위 명령마다 하나씩)를 처리 할 수 ​​있습니다. 부속 명령.

+0

거의 완벽합니다 ... 그러나 하위 명령의 이름이 옵션처럼 보이는 경우 작동하지 않습니다. 모든 옵션에는 두 개의 대시가 있고 모든 하위 명령 이름에는 하나가 있으므로 실제로 모호하지 않습니다. 하지만 이걸 argparse하는 법을 모르겠습니다. – pavpanchekha

1

나는이 도움이 될 것입니다 경우 완전히 모르겠지만, 지금까지, 나는 웹 인터페이스에서 설정 XML에서 인수를 다음 명령으로 전달합니다 래퍼 작성되었습니다

은 분명히 걸립니다 더 인수 문자열을 복잡하지만, 예를 위해 :

def __main__(): 
parser = optparse.OptionParser() 
parser.add_option('-Q', '--ibmax', dest='ibmax', help='') 
(options, args) = parser.parse_args() 
if options.ibmax != 'None' and int(options.ibmax) >= 1: 
       ibmax = '--bmax %s' % options.ibmax 

cmd1 = Popen([another.py, '-Q "%s"' % (options.ibmax),], stdout=PIPE).communicate()[0] 
process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

내 웹 인터페이스에서 특정 플래그에 따라, 더 많은 옵션은 인수 목록에 추가되고, 따라서 다른 명령이 실행됩니다. 모든 명령 옵션을 파서에 추가 한 다음 -Y 또는 -S 명령의 값을 검사하여 vars를 설정하고 전달해야하는 명령을 변경하십시오.

나는 이것이 도움이 되었으면 좋겠다. 나는 파이썬 전문가가 아니다. 이것은 나를 위해 일하는 것이다.

관련 문제