Python - 명령줄 인수

안녕하세요, 더 나은 프로그래머를 꿈꾸는 여러분! 오늘, 우리는 Python의 명령줄 인수의 흥미로운 세계로 여행을 떠날 거예요. 프로그래밍에 새로운 사람이라도 걱정하지 마세요; 저는 경험豊富한 교사의 세심함과 인내로 여러분을 각 단계마다 안내할 거예요. 그럼 시작해볼까요!

Python - Command-Line Arguments

명령줄 인수란 무엇인가요?

요리사로 상상해봅시다. 항상 같은 요리를 만드는 것이 아니라, 고객들이 요청하는 것에 따라 재료를 변경할 수 있다면 어떨까요? 프로그래밍에서 명령줄 인수는 고객들의 특별 요청과 유사합니다. 이를 통해 우리는 Python 프로그램을 실행할 때 다른 입력을 제공할 수 있어, 코드가 더 유연하고 강력해집니다.

Python 명령줄 인수

Python에서는 sys 모듈을 사용하여 쉽게 명령줄 인수에 접근할 수 있습니다. 간단한 예제부터 시작해볼까요:

import sys

print("Hello, I'm your first Python program!")
print("Number of arguments:", len(sys.argv))
print("Arguments:", str(sys.argv))

이를 hello_args.py로 저장하고 명령줄에서 이렇게 실행해봅시다:

python hello_args.py arg1 arg2 arg3

다음과 같은 출력이 나올 것입니다:

Hello, I'm your first Python program!
Number of arguments: 4
Arguments: ['hello_args.py', 'arg1', 'arg2', 'arg3']

이를 분석해봅시다:

  • sys.argv는 명령줄 인수를 포함하는 리스트입니다.
  • 첫 번째 항목(sys.argv[0])은 항상 스크립트 자신의 이름입니다.
  • 나머지 항목들은 우리가 전달한 인수들입니다.

특정 인수에 접근하기

이제 이 인수들을 사용하여 프로그램을 만들어봅시다:

import sys

if len(sys.argv) < 2:
print("Please provide your name as an argument!")
else:
name = sys.argv[1]
print(f"Hello, {name}! Welcome to the world of command-line arguments!")

이를 greet.py로 저장하고 실행해봅시다:

python greet.py Alice

출력:

Hello, Alice! Welcome to the world of command-line arguments!

인수를 주지 않고 실행한 경우:

python greet.py

출력:

Please provide your name as an argument!

이 예제는 우리가 프로그램을 어떻게 인터랙티브하고 사용자 친화적으로 만들 수 있는지 보여줍니다!

실행 시 인수 전달

이제 더 praktische 예제를 만들어봅시다. 간단한 계산기를 만들어볼까요:

import sys

def calculator(operation, num1, num2):
if operation == 'add':
return num1 + num2
elif operation == 'subtract':
return num1 - num2
elif operation == 'multiply':
return num1 * num2
elif operation == 'divide':
return num1 / num2 if num2 != 0 else "Error: Division by zero"
else:
return "Invalid operation"

if len(sys.argv) != 4:
print("Usage: python calculator.py <operation> <num1> <num2>")
else:
operation = sys.argv[1]
try:
num1 = float(sys.argv[2])
num2 = float(sys.argv[3])
result = calculator(operation, num1, num2)
print(f"Result: {result}")
except ValueError:
print("Error: Please provide valid numbers")

이를 calculator.py로 저장하고 사용해봅시다:

python calculator.py add 5 3

출력:

Result: 8.0

이 계산기 예제는 우리가 어떻게 다른 입력을 받아서 다양한 연산을 수행할 수 있는 강력한 도구를 만들 수 있는지 보여줍니다.

Python getopt 모듈

더 복잡한 명령줄 인터페이스를 위해 Python는 getopt 모듈을 제공합니다. 이는 우리의 사용자가 제공할 수 있는 다양한 옵션과 인수를 정리하는 능력 있는 비서와 유사합니다.

예제를 보여드리자:

import sys
import getopt

def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print('Input file is:', inputfile)
print('Output file is:', outputfile)

if __name__ == "__main__":
main(sys.argv[1:])

이를 file_processor.py로 저장하고 실행해봅시다:

python file_processor.py -i input.txt -o output.txt

출력:

Input file is: input.txt
Output file is: output.txt

getopt 모듈은 짧은 옵션(-i, -o)과 긴 옵션(--ifile, --ofile)을 처리할 수 있게 해주어 프로그램을 더 사용자 친화적으로 만듭니다.

Python argparse 모듈

더 복잡한 명령줄 인터페이스를 위해 Python는 argparse 모듈을 제공합니다. 이는 우리의 명령줄 요구에 맞춘 전체 서비스 레스토랑과 유사합니다!

예제를 보여드리자:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

이를 integer_processor.py로 저장하고 사용해봅시다:

python integer_processor.py 1 2 3 4

출력:

4

또는 --sum 옵션을 사용한 경우:

python integer_processor.py 1 2 3 4 --sum

출력:

10

argparse 모듈은 자동으로 도움 메시지를 생성하고, 에러를 처리하며, 더 복잡한 인수 구조를 허용합니다.

방법 비교

여기 우리가 논의한 방법들의 비교를 살펴보겠습니다:

Method Complexity Use Case
sys.argv Simple Basic argument handling
getopt Moderate Short and long options
argparse Advanced Complex CLIs with automatic help

기억해주세요, 가장 좋은 방법은 여러분의 구체적인 요구에 따라 다릅니다. 간단한 sys.argv으로 시작하고, 프로그램이 더 복잡해지면 getopt이나 argparse를 고려해볼 수 있습니다.

결론적으로, 명령줄 인수는 여러분의 Python 도구 상자에 강력한 도구입니다. 이를 통해 여러분은 다양한 입력과 사용자 요구에 맞춘 유연하고 상호작용적인 프로그램을 만들 수 있습니다. Python 여정을 계속하면서, 이러한 기술을 사용하여 놀라운 소프트웨어를 구축하는 무수한 방법을 찾을 것입니다. 코딩을 즐겁게, 여러분의 명령줄 모험이 흥미로운 길을 이어지길 바랍니다!

Credits: Image by storyset