[파이썬] argparse와 piped input 사용법

argparse와 piped input은 파이썬에서 명령행 인자를 처리하고, 다른 프로그램의 출력을 파이프로 연결하는 데 사용되는 강력한 도구입니다. 이 블로그 포스트에서는 argparse와 piped input의 기본 사용법에 대해 알아보겠습니다.

argparse

argparse는 명령행 인자를 파싱하고 처리하는 데 사용되는 파이썬 표준 라이브러리입니다. 다른 프로그램으로부터 인자를 받아와서 처리할 수 있도록 도와줍니다.

아래는 argparse를 사용하여 --input--output 인자를 받아들이는 간단한 예제 코드입니다.

import argparse

parser = argparse.ArgumentParser(description='Process input and output files.')
parser.add_argument('--input', help='input file')
parser.add_argument('--output', help='output file')

args = parser.parse_args()

if args.input:
    # input 파일을 처리하는 로직 작성
    print(f'Reading input from file: {args.input}')

if args.output:
    # output 파일을 처리하는 로직 작성
    print(f'Writing output to file: {args.output}')

위 코드에서는 --input--output을 사용하여 각각 입력 파일과 출력 파일을 지정할 수 있습니다. 해당 인자가 입력되지 않으면 해당 로직은 실행되지 않습니다.

Piped Input

파이프드 입력은 다른 프로그램의 출력을 파이프로 연결하여 해당 출력을 입출력으로 사용하는 것을 의미합니다. 파이썬에서는 sys.stdin을 사용하여 piped input을 처리할 수 있습니다.

아래 예제는 piped input을 받아와서 각 줄을 대문자로 변환한 후 출력하는 간단한 코드입니다.

import sys

for line in sys.stdin:
    upper_line = line.upper()
    print(upper_line, end='')

위 코드는 파이프로 연결된 입력을 한 줄씩 읽어와서 대문자로 변환한 후 출력합니다. 실행 중에는 입력이 계속해서 들어오므로 입력이 있는 한 계속 처리됩니다.

Piped Input과 argparse 함께 사용하기

argparse와 piped input을 함께 사용할 때에는 조금 더 주의가 필요합니다. 예를 들어, 인자로 파일명을 받는 --input인자가 주어지지 않았을 경우, piped input으로부터 데이터를 읽어와야 할 수도 있습니다.

이러한 경우에는 argparsedefault 옵션을 사용하여 기본값을 설정하면 됩니다. 아래는 이를 적용한 예제 코드입니다.

import argparse
import sys

parser = argparse.ArgumentParser(description='Process input and output files.')
parser.add_argument('--input', default=sys.stdin, help='input file')

args = parser.parse_args()

for line in args.input:
    upper_line = line.upper()
    print(upper_line, end='')

위 코드에서는 --input 인자가 주어지지 않았을 때 기본값으로 sys.stdin을 설정하여 piped input을 처리하도록 합니다.

이렇게 하면 --input이 주어지면 해당 파일을 처리하고, 주어지지 않으면 piped input을 처리하게 됩니다.

이제 argparse와 piped input을 함께 사용하는 방법에 대해 알아보았습니다. 이러한 도구들은 파이썬 프로그램에서 유연하고 강력한 입력 처리를 가능하게 합니다. 꼭 필요한 인자를 받아 처리하거나, 다른 프로그램의 출력을 파이프로 연결하여 사용할 수 있습니다.