Python의 명령 줄 인수

Manav Narula 2023년1월30일
  1. sys모듈을 사용하여 Python에서 명령 줄 인수 처리
  2. getopt모듈을 사용하여 Python에서 명령 줄 인수 처리
  3. argparse모듈을 사용하여 Python에서 명령 줄 인수 처리
Python의 명령 줄 인수

명령 줄 인수는 파일을 실행하는 동안 명령 줄 창에 제공되는 값입니다. 프로그램을 실행하는 동안 값을 전달할 수 있기 때문에 수용하고 있습니다.

Python에서는 아래에서 설명하는 명령 줄 인수를 처리하는 데 다른 모듈을 사용할 수 있습니다.

sys모듈을 사용하여 Python에서 명령 줄 인수 처리

sys.argv()는 명령 행에 제공된 인수를 목록 유형 구조로 저장하는 데 사용됩니다. 파일 이름이 첫 번째 인수로 간주됩니다.

예를 들면

import sys

print("Arguments without the script name ", (len(sys.argv) - 1))
print("Arguments given ")
for i in range(1, len(sys.argv)):
    print(sys.argv[i])

위의 예에서는 런타임에 일부 인수를 전달하고 총 인수 수와 해당 값을 표시합니다.

getopt모듈을 사용하여 Python에서 명령 줄 인수 처리

getopt모듈은 명령 줄 인수도 처리합니다. 주어진 값을 검증 할 수 있습니다. 스크립트가 인식 할 수있는 옵션 문자열과 함께 인수와 함께 값을 제공 할 수 있습니다. 이 모듈은 더 나은 처리를 위해 sys 모듈과 함께 작동합니다.

getopt()생성자는 인수를 구문 분석하는 객체를 초기화하는 데 사용됩니다. 옵션이 인수 목록에서 인식되지 않으면getopt.error를 리턴합니다.

아래 코드에서 사용합니다.

import getopt
import sys

lst = sys.argv[1:]
options = "abc:"
long_options = ["A_Message", "B_Message", "C_Message"]

try:

    arguments, values = getopt.getopt(lst, options, long_options)

    for currentArgument, currentValue in arguments:

        if currentArgument in ("-a", "--A_Message"):
            print("Message A received")
        elif currentArgument in ("-b", "--B_Message"):
            print("Message B received")
        elif currentArgument in ("-c", "--C_Message"):
            print("Message C received")

except getopt.error as err:
    print("Error")

argparse모듈을 사용하여 Python에서 명령 줄 인수 처리

argparse 모듈은 명령 줄 인수로 작업하기에 가장 편리한 모듈입니다. 이 모듈은 위치 인수, 선택적 인수를 처리하고 유형을 지정할 수 있기 때문에 많은 유연성을 제공합니다.

일부 인수가 누락 된 경우 일부 기본값을 입력하고 도움말 메시지를 표시 할 수도 있습니다.

ArgumentParser()함수는 파서 객체를 생성합니다. parse.args()함수는 명령 줄에서 인수를 읽습니다.

예를 들면

import argparse

parser = argparse.ArgumentParser(description="Which Message?")
parser.add_argument("a")
parser.add_argument("b")
args = parser.parse_args()
print(args.a, args.b)
작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn