Python 스크립트에 명령줄 인수를 추가하는 방법

How Add Command Line Arguments Python Script



터미널 에뮬레이터 또는 GUI 앱에서 주로 실행되는 Python 스크립트 또는 애플리케이션을 개발한 경우 명령줄 인수를 추가하면 최종 사용자를 위한 애플리케이션의 유용성, 코드 가독성, 애플리케이션 구조 및 전반적인 사용자 친화성을 향상시킬 수 있습니다. 이러한 명령줄 인수는 옵션 또는 스위치라고도 하며 일반적으로 bash 스크립트 및 기타 C/C++ 기반 프로그램에서 볼 수 있는 인수와 유사하게 작동합니다.

Python 스크립트에 인수를 추가하려면 argparse라는 내장 모듈을 사용해야 합니다. 이름에서 알 수 있듯이 Python 스크립트 또는 응용 프로그램을 시작하는 동안 사용된 명령줄 인수를 구문 분석합니다. 이러한 구문 분석된 인수는 적절한 유형인지 확인하기 위해 argparse 모듈에서도 검사합니다. 인수에 잘못된 값이 있으면 오류가 발생합니다.







argparse 모듈의 사용법은 예제를 통해 가장 잘 이해할 수 있습니다. 다음은 argparse 모듈을 시작하는 데 도움이 되는 몇 가지 코드 샘플입니다.



예 1: 도움말 인수 및 메시지 생성

아래 코드 샘플을 고려하십시오.



수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

인수= 파서.parse_args()

첫 번째 문은 argparse 모듈을 가져옵니다. 다음으로 ArgumentParser 개체의 새 인스턴스가 생성되고 프로그램에 대한 간단한 설명이 인수로 제공됩니다. ArgumentParser 개체는 명령줄 인수 값을 Python에서 이해할 수 있는 데이터 형식으로 변환하는 데 필요합니다. 이것은 마지막 문장에서 볼 수 있듯이 ArgumentParser 객체의 parse_args 메소드에 의해 수행됩니다.





위에서 설명한 코드 샘플을 test.py라는 파일에 저장했다고 가정하고 아래 명령을 실행하면 프로그램과 관련된 도움말 메시지가 표시됩니다.

$ ./시험.파이-시간

$ ./시험.파이-돕다

다음과 유사한 출력을 얻어야 합니다.



사용법: test.py [-h]


테스트 프로그램입니다.


선택적 인수:

-h, --help 이 도움말 메시지를 표시하고 종료

위에서 언급한 코드 샘플에는 구문 분석된 인수를 처리하고 개체로 변환하는 논리가 추가되지 않았습니다. 따라서 개별 인수에 대한 도움말 메시지는 출력에 표시되지 않습니다. 프로그램에서 구문 분석된 인수 값을 처리하기 위한 논리를 추가하면 도움말 메시지에 개별 인수에 대한 설명이 표시되기 시작합니다.

예 2: 문자열 인수 처리

Python 스크립트에서 허용되는 인수를 추가하려면 add_argument 메소드를 사용해야 합니다. 다음 코드를 살펴보십시오.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument('인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.')

인수= 파서.parse_args()

인쇄(인수.print_string)

add_argument 메소드의 사용을 보여주는 새로운 문이 추가되었습니다. 스크립트를 시작할 때 추가된 모든 인수는 ArgumentParser에 의해 print_string 개체로 처리됩니다.

기본적으로 add_argument 메서드는 인수에서 가져온 값을 문자열로 취급하므로 이 경우 유형을 명시적으로 지정할 필요가 없습니다. 재정의되지 않는 한 기본값인 None도 추가된 인수에 할당됩니다.

다시 한 번 도움말 메시지를 살펴보십시오.

사용법: test.py [-h] [print_string]


테스트 프로그램입니다.


위치 인수:

print_string 제공된 인수를 인쇄합니다.


선택적 인수:

-h, --help 이 도움말 메시지를 표시하고 종료

출력의 라인 중 하나는 위치 인수를 말합니다. 인수에 대한 키워드가 정의되지 않았기 때문에 현재 인수는 제공된 인수의 순서와 위치가 프로그램에 직접적인 영향을 미치는 위치 인수로 처리됩니다. 수동으로 동작을 변경하지 않는 한 위치 인수도 필수입니다.

선택적 인수를 정의하고 구문 분석하려면 –(이중 대시)를 사용하고 기본 인수를 사용하여 기본값을 변경할 수 있습니다.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument('--인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.',기본=에게무작위의 .)

인수= 파서.parse_args()

인쇄(인수.print_string)

이제 인수 없이 test.py 스크립트를 실행하면 A random string이 표시됩니다. 출력으로. 또한 선택적으로 –print_string 키워드를 사용하여 선택한 문자열을 인쇄할 수도 있습니다.

$ ./시험.파이--print_string Linux힌트.~와 함께리눅스힌트닷컴

추가 required=True 인수를 사용하여 선택적 인수를 필수로 만들 수 있습니다.

마지막으로 -(단일 대시)를 사용하여 인수의 약식 버전을 정의하여 자세한 내용을 줄일 수도 있습니다.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument(-NS, '--인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.',기본=에게무작위의 .)

인수= 파서.parse_args()

인쇄(인수.print_string)

다음 명령을 실행하면 위와 동일한 결과를 얻을 수 있습니다.

$ ./시험.파이-p 리눅스 힌트.~와 함께

예 3: 정수 인수 처리

정수 값이 필요한 인수를 처리하려면 type 키워드를 int로 설정하여 유효성 검사를 허용하고 조건이 충족되지 않을 경우 오류를 발생시켜야 합니다.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument('-NS', '--인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.', 유형=정수)

인수= 파서.parse_args()

인쇄(인수.print_string)

다음 명령을 실행해 보십시오.

$ ./시험.파이-p 리눅스 힌트.~와 함께

다음과 같은 오류가 발생해야 합니다.

사용법: test.py [-h] [-p PRINT_STRING]

test.py: 오류: 인수 -p/--print_string: 잘못된 int 값: 'LinuxHint.com'

정수 값을 제공하면 올바른 결과를 얻을 수 있습니다.

$ ./시험.파이-NS10001000

예 4: True 및 False 토글 처리

action 인수를 사용하여 값 없이 인수를 전달하여 True 및 False 플래그로 처리할 수 있습니다.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument('-NS', '--인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.',동작='store_true')

인수= 파서.parse_args()

인쇄(인수.print_string)

출력으로 간단한 True를 얻으려면 아래 명령을 실행하십시오.

$ ./시험.파이-NS

-p 인수 없이 스크립트를 실행하면 대신 False 값이 할당됩니다. action 키워드의 store_true 값은 -p 인수가 명시적으로 지정될 때마다 print_string 변수에 True 값을 할당하고, 그렇지 않으면 False가 변수에 할당됩니다.

예 5: 인수 값을 목록으로 처리

한 번에 여러 값을 가져와 목록에 저장하려면 다음 형식으로 nargs 키워드를 제공해야 합니다.

수입argparse

파서 =인수분해.인수 파서(설명='테스트 프로그램.')

파서.add_argument('-NS', '--인쇄 문자열', 돕다='제공된 인수를 인쇄합니다.',나그='*')

인수= 파서.parse_args()

인쇄(인수.print_string)

다음 명령을 실행하여 위의 코드를 테스트합니다.

$ ./시험.파이-p b

다음과 같은 결과가 나와야 합니다.

['아', '나']

결론

argparse 모듈은 명령줄 응용 프로그램의 동작을 조정하고 사용자가 제공한 값을 구문 분석할 수 있는 수많은 옵션이 포함된 매우 포괄적입니다. 이 예제에서는 argparse 모듈의 기본 사용법만 다룹니다. 고급 및 복잡한 응용 프로그램의 경우 다른 구현이 필요할 수 있습니다. 방문하다 공식 문서 모듈에 대한 전체 설명을 보려면