ABOUT ME

Today
-
Total
-
  • [Python]스크립트 실행 시에 인자 전달 받기
    개발/Python 2026. 1. 13. 16:42

    파이썬 스크립트를 짜다 보면 상황에 맞게 사용자로부터 인자를 전달받아 함수를 실행해야 할 경우가 생긴다.

     

    이럴 때 사용 가능한 스크립트 실행 시에 인자를 전달 받는 방법을 공유한다.

     

    파이썬 스크립트에 인자를 전달 받기 위해선 argparse 라이브러리를 참조해야 한다.

    import argparse

     

    이제 스크립트를 짜고 인자 처리를 따로 해주면 된다.

    import sys, argparse
    
    def ArgumentTest(arg1, arg2, arg3):
        print(arg1)
        print(arg2)
        print(arg3)
        
    if __name__=="__main__":
        parser = argparse.ArgumentParser(prog="Arguments Test Prog")
    
        parser.add_argument("arg1", help="First Argument")
        parser.add_argument("arg2", help="Second Argument")
        parser.add_argument("arg3", type=str, default="ARG3", help="Third Argument")
        
        args = parser.parse_args()
        
        if len(args) < 2:
        	print("인자가 부족합니다")
            
        first_arg = args.arg1
        second_arg = args.arg2
        third_arg = args.arg3
        
        ArgumentTest(arg1, arg2, arg3)

     

    해당 스크립트를 실행할 땐 명령 실행 창에서 하기의 커맨드를 사용하면 된다.

    argTest.py "Hello" "Test" "Arguments"

     

    사용 시 참고 사항

    1. add_argument 함수를 이용해 인자를 추가할 때, 옵션을 줄 수 있다.

    옵션 설명
    type 인자의 자료형을 정의한다.
    default 인자의 기본 값을 정의한다. 해당 값이 없으면 필수 인자로 인식하며 전달받지 못 하면 에러가 발생한다.
    help 각 인자의 설명을 정의한다. -h, --help 옵션을 주고 스크립트 실행 시 출력된다. 

     

    2. Parser를 사용하지 않고 sys.argv 리스트에 직접 접근하는 방법도 있다. 이 경우 상기의 코드를 하기와 같이 쓸 수 있다.

    import sys
    
    def ArgumentTest(arg1, arg2, arg3):
        print(arg1)
        print(arg2)
        print(arg3)
        
    if __name__=="__main__":    
        if len(sys.argv) < 3:
        	print("인자가 부족합니다")
            
        ArgumentTest(sys.argv[1], sys.argv[2], sys.argv[3])

     

    sys.argv 리스트의 0번 인덱스에는 항상 프로그램 이름이 들어가 있으므로, 실제 인자의 인덱스는 1부터 시작한다.

     

    인자 개수 처리 시에도 0번 인덱스를 프로그램 이름이 차지하는 것을 염두에 두고 필수 인자 개수 + 1 로 처리해야 한다.

    (필수 인자 개수가 2개라면, sys.argv 리스트의 최소 길이는 3이 돼야 한다.)

    '개발 > Python' 카테고리의 다른 글

    [Python]파이썬 스크립트를 exe 실행 파일로 빌드하기  (0) 2026.01.13
Designed by Tistory.