파이썬에서 명령줄 인터페이스를 구현하기 위해 argparse
모듈을 사용하는 경우, parse_args()
와 parse_known_args()
두 가지 메소드를 사용할 수 있습니다. 이 두 메소드는 명령줄 인자를 파싱하고, 사용자의 입력을 받아서 처리하는 데 사용됩니다. 그러나 parse_args()
와 parse_known_args()
에는 몇 가지 차이점이 있으며, 이러한 차이점을 이해하는 것이 중요합니다.
parse_args()
parse_args()
메소드는 사용자의 입력을 완전히 파싱합니다. 이 메소드는 명령줄에서 전달된 모든 인자를 분석하여 해당하는 인자값을 검색하고, 인자의 타입을 지정한 다음 해당 인자값을 반환합니다. parse_args()
는 명령줄에서 인자들이 정의된 순서대로 제공되기를 기대합니다.
예를 들어, 아래의 코드는 argparse
를 사용하여 두 개의 인자(--name
과 --age
)를 파싱하는 예시입니다.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--name", type=str, help="이름을 입력하세요.")
parser.add_argument("--age", type=int, help="나이를 입력하세요.")
args = parser.parse_args()
print(args.name)
print(args.age)
위의 코드에서 parse_args()
는 --name
과 --age
인자들을 기대하고, 사용자의 입력을 받아 해당하는 값들을 추출합니다. 만약 사용자가 --name
과 --age
인자를 올바르게 지정했다면, 해당하는 값들은 args.name
과 args.age
에 할당됩니다. 그렇지 않은 경우 argparse
는 에러를 발생시킵니다.
parse_known_args()
parse_known_args()
메소드는 parse_args()
와 매우 유사하지만, 한 가지 큰 차이점이 있습니다. 만약 parse_known_args()
에 정의되지 않은 추가적인 인자들이 존재한다면, 이 메소드는 그 인자들을 무시하고 파싱한 인자들만 반환합니다. 즉, parse_known_args()
는 정의되지 않은 인자들을 허용합니다.
예를 들어, 위의 예시 코드를 parse_known_args()
를 사용하여 수정해보겠습니다.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--name", type=str, help="이름을 입력하세요.")
parser.add_argument("--age", type=int, help="나이를 입력하세요.")
args, unknown = parser.parse_known_args()
print(args.name)
print(args.age)
parse_known_args()
의 호출 결과로 반환되는 값은 args
와 unknown
입니다. args
는 --name
과 --age
에 해당하는 파싱된 인자들을 포함하는 객체이고, unknown
은 parse_known_args()
에서 정의되지 않은 추가적인 인자들을 포함하는 리스트입니다.
이렇게 parse_known_args()
를 사용하면, 사용자의 입력에 정의되지 않은 인자들이 포함되어 있더라도 에러가 발생하지 않습니다. 이는 애플리케이션이 유동적인 인자들을 처리하거나, 일부 인자들을 무시하고 싶을 때 유용합니다.
결론
argparse
의 parse_args()
와 parse_known_args()
는 명령줄 인터페이스를 생성하는 데 사용되는 두 가지 메소드입니다. parse_args()
는 정의된 인자를 전체적으로 파싱하고, 정의되지 않은 인자들에 대해서는 예외를 발생시킵니다. 반면에 parse_known_args()
는 정의되지 않은 인자들을 무시하고, 파싱된 인자들만 반환합니다. 애플리케이션의 요구에 따라서 parse_args()
또는 parse_known_args()
중 어떤 메소드를 사용할지 결정할 수 있습니다.