• 2020. 7. 2.

    by. 윈썸지니

    반응형

    출처 : pixabay

    지난 포스팅에서 함수에 대해 알아보았고 또한 인자 전달 방법에 대해 알아보았습니다.

    이번 포스팅은 함수로 인자 전달하는 방법은 알았으나, 명령행(커맨드 라인)에서는 인자를 어떻게 전달하는지 알아봅니다.

     

    커맨드 라인에서 프로그램 실행 시 뒤에 argument를 주는 방법입니다.

     

    예를 들면 두개의 인자를 전달하여 덧셈한 값을 알려주는 프로그램(add)을 작성한다고 가정합니다.

    python add.py 3 10   이렇게 명령행에서 바로 인자를 전달하는 방법에 대해 알아봅니다.

     

    sys 모듈을 이용하는 방법

     

    모듈이라는 내용은 추후 포스팅 예정입니다.

    지금은 그냥 파이썬에서 함수(외장함수)를 이용하기 위해 사용한다 정도 이해해주세요.

    sys 모듈은 import sys 라고 파이썬 상단 부분에 코딩을 넣어주어야 합니다.

    참고로 import 하지 않고도 파이썬 함수를 사용할 수 있는데 이것은 내장함수, import 를 사용해는 것은 외장함수 입니다.

     

    아래 예제를 참고해 주세요.

    명령행으로 해야하므로 IDLE 에서 파일로 작성을 하겠습니다. 파이참과 같은 툴을 사용해도 됩니다.

    add.py  라는 파일명으로 아래 코드를 작성합니다.

    import sys

    if len( sys.argv) != 3:

        print( "인자는 2개의 숫자입니다")

        print( "Usage : python add.py number1 number2 " )

        print( "   ex\): python add.py 3 10" )

        sys.exit()

    num1 = int(sys.argv[1])

    num2 = int(sys.argv[2])

    sum = num1 + num2

    print ( " %d 더하기 %d%d 입니다." % (num1, num2, sum ) )

    명령어 창에서 add.py를 실행해 봅니다.

     

    명령창 실행방법  windows+R -> cmd 입력

    add.py 가 저장된 폴더로 이동합니다.

     

    인자 두개를 주어 테스트 해 봅니다.

    C:\py_test>python add.py 3 10

     3 더하기 1013 입니다.

    C:\py_test>python add.py 22222 99999

     22222 더하기 99999122221 입니다.

    인자를 1개만 주면 인자 개수 3( 파이썬 실행 프로그램명 포함)가 맞이 않아 사용법 메시지를 출력하고 종료합니다.

    C:\py_test>python add.py 22222
    인자는 2개의 숫자입니다
    Usage : python add.py number1 number2
       ex\): python add.py 3 10

    인자는 argv[1] 부터 시작합니다.

    실제로 인자가 어떻게 전달 되는지 확인을 위해 위 코드에 print( sys,argv) 로 출력해 본 결과입니다.

    C:\py_test>python add.py 2 4

    ['add.py', '2', '4']  --> 프로그램명이 argv[0] 에 들어가고 인수는 argv[1] 부터 전달됩니다.

     2 더하기 4는 6 입니다.

    위에서 또 하나 발견된 것은 숫자로 인자를 전달하였으나 문자로 받아들여 진다는 점입니다.

    따라서 프로그램 안에서 숫자로 변경하는 int() 내장함수를 사용하였습니다.

     

    전체 전달되는 인자의 개수를 알기 위해서는 len( sys.argv) 사용하여 프로그램명도 포함되므로 실제 인자 수 보다 1이 큽니다.

    C언어에서는 argc 로 인수의 개수를 알 수 있었지만 파이썬은 argc 는 없는듯 합니다.

     

    argparse 모듈을 이용하는 방법

     

    argparse 를 이용하면 앞의 sys 모듈을 이용할 때 보다 편하게 사용 할 수 있습니다.

    앞의 소스에 더 추가로 코딩 되어야 할 내용들이 있습니다.

     

    예를 들면 인자의 오류를 체크한다면 문자가 인자로 전달되면 메시지를 출력하고 종료하는 코딩을 넣어야 할 것이고 좀더 복잡한 인자를 전달한다면 파싱하는 부분들과 케이스별 체크하는 부분이 적절히 추가 되어야 할 것입니다.

    하지만 argparse 를 사용하면 훨씬 수월한 코딩을 할 수 있습니다.

     

    비교를 위해  앞의 sys.argv로 되어 있는 소스를 argparse로 변경해 보겠습니다

    import argparse

    parser = argparse.ArgumentParser( description="인자는 2개의 숫자입니다" )

    parser.add_argument( 'integers', metavar='N', type=int, nargs=2, help='숫자로 입력하세요')

    args = parser.parse_args()

    #print( args.integers )

    print( " %d 더하기 %d%d 입니다." % (args.integers[0], args.integers[1], args.integers[0]+args.integers[1] ))

    명령창에서 실행해 봅니다.

    help 기능을 제공합니다.

    C:\py_test>python add1.py  -h

    usage: add1.py [-h] N N

    인자는 2개의 숫자입니다

    positional arguments:

      N           숫자로 입력하세요

    optional arguments:

      -h, --help  show this help message and exit

    정상적으로 실행 해 봅니다.

    C:\py_test>python add1.py  2 4

     2 더하기 4는 6 입니다.

    C:\py_test>python add1.py  2222 99999

     2222 더하기 99999는 102221 입니다.

    인수가 적을 경우 사용방법 및 오류 메시지를 출력해 줍니다.

    C:\py_test>python add1.py  2222

    usage: add1.py [-h] N N

    add1.py: error: the following arguments are required: N

    인수가 숫자가 아닌 경우 사용방법 및 오류 메시지를 출력해 줍니다.

    C:\py_test>python add1.py  a b

    usage: add1.py [-h] N N

    add1.py: error: argument N: invalid int value: 'a'

    비교를 해 보면 사용방법 또는 help 기능 및 인자 수, 타입오류 등을 코딩하지 않아도 간단하게 처리해 줍니다.

    참 편하고 유용한 모듈입니다. 그리고 프로그램을 좀 더 고급스럽게 해 줍니다.

     

    이번 포스팅은 간단하게 맛보기하고 다음 포스팅에서 argparse에 대해서 더 유용한 예제와 설명으로 뵙겠습니다.

    반응형