Python에서 명령 줄 인수를 어떻게 처리 할 수 있습니까?
-
05-09-2019 - |
문제
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
.
실제 명령 줄 스위치를 구현하려면 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에 대한 자세한 내용은 관련 파이썬 문서.