2011-02-14 2 views
2

우선, optparse는 2.7 이후로 더 이상 사용되지 않습니다. 그러나 나는 작동중인 컴퓨터에서만 Python 2.3을 사용할 수 있습니다.Python의 optparse에서 정렬 된 옵션

python example.py -f foo -b bar 

먼저 옵션 (F) 다음 옵션 B와

python example.py -b bar -f foo 
를 실행합니다 :

질문이 조건이 예를 들어, 명령 줄에 주어진 순서를 알고하는 방법입니다

은 그 반대입니다.

나는 options 객체가 특정 순서를 따라야하는 것 같지 않기 때문에, 이 다른 옵션에 대한 위치를 감지 할 수있는 옵션을 저장하기 위해 callback 조치를 사용하는 것입니다 optargs 문서를 읽은 후 함께했다 유일한 해결책 .

이 문제에 대한 다른 해결책이 있습니까?

+2

규칙은 분명합니다. 문제가되지 않습니다. 왜 명령 줄 구문 분석 규칙을 위반하려고합니까? 일반적으로 규칙을 구현하고 적용하기가 더 쉬운 대체 방법이 있습니다. 이 질문 뒤에 배경은 무엇입니까? –

+0

당신의 현재 솔루션은 나에게 솔직하게 보인다. 문제가 있습니까? –

+0

문제는 "-a"플래그가 일부 데이터를 수정하고 플래그 "-b"가 다른 데이터를 수정하는 것입니다. 물론 함수 A()를 먼저 적용한 다음 함수 B() (또는 다른 방법으로 arround)를 적용하는 것은 동일하지 않습니다. 이 함수들이 적용되는 순서를 지정할 수 있기를 원합니다. 데이터의 변환 A() 및 B()가 플래그'-a' 및'-b'에 의해 트리거되므로 순서를 고려하면이 문제가 해결됩니다. 어쩌면 이것을 할 수있는 또 다른 방법이있을 수 있습니다. 그래서 나는 그 다른 방법을 묻기 위해 질문을 재구성해야합니다. – skd

답변

4

순서에 따라 다른 동작을 트리거하는 옵션 플래그를 사용하는 것은 규칙에 위배됩니다. 하지만 주문을 확인하고 싶다면 sys.argv를 보시면됩니다.

#assuming both -f and -b are given in cmdline and you need to check for order 
index_f = sys.argv.find("-f") 
index_b = sys.argv.find("-b") 
if index_f < index_b: 
    # do something if -f is before -b 
+0

옵션은 다른 행동을 유발하지 않습니다. 주요 질문에서 편집을 읽으십시오. 어쨌든,이 작동합니다, 감사합니다. – skd