문제

001 또는 999와 같은 것을 기대하는 경우 명령 줄 인수를 처리하기 쉬운 표현은 무엇입니까 (이번에는 기대치를 001 ... 999 범위로 제한합시다), 다른 몇 가지 인수는 전달되지 않았으며, 예상치 못한 것을 무시하고 싶습니다. ?

예를 들어 "디버그"가 매개 변수 중 하나인지 확인 해야하는지 이해합니다.

if 'debug' in argv[1:]:
  print 'Will be running in debug mode.'

009 또는 575가 통과되었는지 알아내는 방법은 무엇입니까?

이 모든 것은 예상되는 전화입니다.

python script.py
python script.py 011
python script.py 256 debug
python script.py 391 xls
python script.py 999 debug pdf

이 시점에서 나는 그런 전화에 신경 쓰지 않습니다.

python script.py 001 002 245 568
python script.py some unexpected argument
python script.py 0001
python script.py 02

... 첫 번째 - 하나 이상의 "숫자"인수 때문에; 둘째 - ... 음, 예상치 못한 논쟁 때문에; 셋째와 네 번째-3 자리가 아닌 인수 때문입니다.

도움이 되었습니까?

해결책

다른 사람들이 대답했듯이 OptParse는 최선의 선택이지만 빠른 코드를 원한다면 다음과 같은 것을 시도하십시오.

import sys, re

first_re = re.compile(r'^\d{3}$')

if len(sys.argv) > 1:

    if first_re.match(sys.argv[1]):
        print "Primary argument is : ", sys.argv[1]
    else:
        raise ValueError("First argument should be ...")

    args = sys.argv[2:]

else:

    args = ()

# ... anywhere in code ...

if 'debug' in args:
    print 'debug flag'

if 'xls' in args:
    print 'xls flag'

편집하다: 여기에 많은 사람들이 왜 그 이유를 설명하지 않고, 당신이 그것을 작동시키기 위해 무엇을 바꿔야하는지 설명하지 않고 OptParse에 응답하고 있기 때문에 OptParse 예입니다.

OptParse를 사용하는 주된 이유는 나중에 확장 할 수있는 유연성을 제공하고 명령 줄에서 더 많은 유연성을 제공하기 때문입니다. 다시 말해, 옵션이 순서대로 나타날 수 있으며 사용 메시지는 자동으로 생성됩니다. 그러나 OptParse와 함께 작동하려면 사양을 선택하여 선택 사항 인수 앞에 '-'또는 '-'를 변경해야하며 모든 인수를 순서대로 허용해야합니다.

다음은 OptParse를 사용하는 예입니다.

import sys, re, optparse

first_re = re.compile(r'^\d{3}$')

parser = optparse.OptionParser()
parser.set_defaults(debug=False,xls=False)
parser.add_option('--debug', action='store_true', dest='debug')
parser.add_option('--xls', action='store_true', dest='xls')
(options, args) = parser.parse_args()

if len(args) == 1:
    if first_re.match(args[0]):
        print "Primary argument is : ", args[0]
    else:
        raise ValueError("First argument should be ...")
elif len(args) > 1:
    raise ValueError("Too many command line arguments")

if options.debug:
    print 'debug flag'

if options.xls:
    print 'xls flag'

OptParse와 사양의 차이점은 이제 다음과 같은 명령 줄을 가질 수 있다는 것입니다.

python script.py --debug --xls 001

Parser.add_option ()로 전화하여 새로운 옵션을 쉽게 추가 할 수 있습니다.

다른 팁

살펴보십시오 optparse 기준 치수. Sys.argv 자신을 다루는 것은 정말 간단한 것들에도 좋지만 빨리 손을 떼십시오.

인수 형식을 약간 변경할 수 있다면 OptParse를 사용하기가 더 쉬울 수 있습니다. 예 : 교체 debug ~와 함께 --debug 그리고 xls ~와 함께 --xls 또는 --output=xls.

optparse 명령 줄을 파싱하는 가장 친한 친구입니다. 또한 조사하십시오 Argparse; 그러나 표준 라이브러리에는 없습니다.

실제 명령 줄 스위치를 구현하려면 getopt 외모. 사용하기도 엄청나게 간단합니다.

Van Gale은 논쟁에 대한 정규 표현을 사용하는 데 크게 정확합니다. 그러나 "-"또는 "-"가 앞에 있는지 여부에 따라 sys.argv를 옵션과 인수로 분할하는 OptParse를 사용할 때 모든 옵션을 만들 필요는 없습니다. 인수 만 거칠 수있는 코드는 다음과 같습니다.

import sys
import optparse

claParser = optparse.OptionParser()
claParser.add_option(
(opts, args) = claParser.parse_args()
if (len(args) >= 1):
  print "Arguments:"
  for arg in args:
    print "  " + arg
else:
  print "No arguments"
sys.exit(0)

예, Args 배열은 Sys.Argv와 거의 같은 방식으로 구문 분석되지만 필요한 경우 옵션을 쉽게 추가 할 수있는 기능이 추가되었습니다. OptParse에 대한 자세한 내용은 관련 파이썬 문서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top