Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 명령줄 옵션을 위한 C 스타일 파서

<시간/>

Python의 sys 모듈은 sys.argv를 통해 모든 명령줄 인수에 대한 액세스를 제공합니다. sys.argv는 명령줄 인수 목록이고 sys.argv[0]은 프로그램입니다. 스크립트 이름.

다음 코드를 args.py로 저장

import sys
print ('argument list', sys.argv)

다음과 같이 명령줄에서 위의 스크립트를 실행합니다.

C:\python37>python args.py 11 22
argument list ['args.py', '11', '22']

getopt 모듈에는 sys.argv의 명령줄 인수를 구문 분석하는 기능이 있습니다. Unix getopt() 함수와 동일한 규칙을 지원합니다('-' 및 '--' 형식의 인수의 특별한 의미 포함).

API는 C getopt() 함수 사용자에게 친숙하도록 설계되었습니다.

getopt(인수, shortopts, longopts=[])

명령줄 옵션과 매개변수 목록을 구문 분석합니다. args는 실행 중인 프로그램에 대한 선행 참조인 sys.argv[0]을 제외한 인수 목록입니다. 일반적으로 이것은 sys.argv[1:]를 의미합니다. 이 함수에 대한 인수는 다음과 같습니다 -

단축: 스크립트에서 인식할 옵션 문자의 문자열입니다. 인수가 필요한 옵션 뒤에는 콜론(':', 즉, Unix getopt()이 사용하는 것과 동일한 형식)이 옵니다.

Longopts: 지정된 경우 지원되어야 하는 긴 옵션의 이름이 있는 문자열 목록이어야 합니다. 선행 '--' 문자는 옵션 이름에 포함되지 않아야 합니다. 인수가 필요한 긴 옵션 뒤에는 등호('=')가 와야 합니다.

반환 값은 두 가지 요소로 구성됩니다. 첫 번째는 (옵션, 값) 쌍의 목록입니다. 두 번째는 옵션 목록이 제거된 후 남은 프로그램 인수 목록입니다(이것은 args의 후행 조각입니다). 반환된 각 옵션 및 값 쌍에는 첫 번째 요소로 옵션이 있으며 짧은 옵션(예:'-x') 또는 긴 옵션(예:'--long-option')의 경우 두 개의 하이픈이 접두사로 붙습니다. 옵션 인수를 두 번째 요소로 사용하거나 옵션에 인수가 없는 경우 빈 문자열입니다. 옵션은 발견된 것과 동일한 순서로 목록에 나타나므로 여러 번 발생할 수 있습니다. 길고 짧은 옵션이 혼합될 수 있습니다.

인수 목록에서 인식할 수 없는 옵션이 발견되거나 인수가 필요한 옵션이 제공되지 않으면 GetoptError가 발생합니다.

예시

import sys, getopt

args=sys.argv[1:]
inputfile = ''
outputfile = ''
try:
   opts, args = getopt.getopt(args,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
   print ('test.py -i <inputfile> -o <outputfile>')
   sys.exit(2)
for opt, arg in opts:
   if opt == '-h':
      print ('args.py -i <inputfile> -o <outputfile>')
      sys.exit()
   elif opt in ("-i", "--ifile"):
      inputfile = arg
   elif opt in ("-o", "--ofile"):
      outputfile = arg
print ('Input file is "', inputfile)
print ('Output file is "', outputfile)

출력

C:\python37>python args.py -h
args.py -i <inputfile> -o <outputfile>
C:\python37>python args.py -i abc.txt -o xyz.txt
Input file is " abc.txt
Output file is " xyz.txt
C:\python37>python args.py --ifile=abc.txt --ofile=xyz.txt
Input file is " abc.txt
Output file is " xyz.txt
입니다.