Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

쉘 파이프라인을 위한 Python 인터페이스 – pipes 모듈 완벽 정리

쉘 파이프라인을 위한 Python 인터페이스

Python에서는 UNIX의 명령어 파이프라인(pipeline) 메커니즘을 손쉽게 활용할 수 있습니다. 명령어 파이프라인이란 여러 개의 셸 명령을 연결하여 한 파일의 데이터를 다른 파일로 단계적으로 변환·처리하는 방식입니다.

이 기능은 pipes 모듈을 통해 제공되며, 내부적으로 /bin/sh 셸의 명령줄을 사용합니다. 따라서 모듈이 동작하는 배경에는 os.system()os.popen() 같은 OS 관련 함수들이 함께 사용됩니다.

참고: pipes 모듈은 Python 3.11부터 지원 중단(deprecated)되었으며, Python 3.13에서 완전히 제거되었습니다. 최신 버전에서는 subprocess 모듈 사용이 권장됩니다.

pipes 모듈을 사용하려면 먼저 임포트해야 합니다.

import pipes

pipes.Template 클래스란?

pipes 모듈의 핵심은 Template 클래스입니다. 이 클래스는 하나의 파이프라인을 추상화한 객체로, 파이프라인을 구성하고 제어할 수 있는 다양한 메서드를 제공합니다.

Template.reset()

파이프라인 템플릿을 초기 상태로 되돌리는 메서드입니다.

Template.clone()

기존 템플릿과 동일한 내용을 가진 새로운 템플릿 객체를 복제(생성)하는 메서드입니다.

Template.debug(flag)

파이프라인 실행 과정을 디버깅하는 메서드입니다. flagTrue이면 디버그 모드가 활성화되며, 실행 중에 실제로 수행되는 각 명령이 출력됩니다.

Template.append(command, kind)

파이프라인의 끝에 새 작업(명령)을 추가하는 메서드입니다. command는 반드시 Bourne 셸(/bin/sh) 명령이어야 하며, kind는 두 글자로 된 문자열로 입출력 방식을 나타냅니다.

첫 번째 글자 — 입력 방식:

번호 문자 및 설명
1

'–'

명령이 표준 입력(stdin)으로 데이터를 읽습니다.

2

'f'

명령이 명령줄에 지정된 파일을 입력으로 읽습니다.

3

'.'

명령이 어떤 입력도 받지 않으므로, 반드시 파이프라인의 첫 번째 위치에 있어야 합니다.

두 번째 글자 — 출력 방식:

번호 문자 및 설명
1

'–'

명령이 표준 출력(stdout)으로 결과를 씁니다.

2

'f'

명령이 명령줄에 지정된 파일에 결과를 씁니다.

3

'.'

명령이 어떤 출력도 내지 않으므로, 반드시 파이프라인의 마지막 위치에 있어야 합니다.

Template.prepend(command, kind)

파이프라인의 맨 앞에 새 작업을 삽입하는 메서드입니다. 사용법은 append()와 동일하며, 명령 역시 Bourne 셸 명령이어야 합니다.

Template.open(file, mode)

파일을 열어 읽거나 쓰기 위한 메서드입니다. 실질적인 읽기/쓰기 작업은 파이프라인을 통해 수행됩니다.

Template.copy(infile, outfile)

infile에서 outfile로 데이터를 복사하는 메서드입니다. 복사 과정 전체가 구성된 파이프라인을 거치면서 처리됩니다.

예제 코드

아래 예제는 세 개의 셸 명령(echo, tr, rev)을 파이프라인으로 연결한 뒤, 그 결과를 파일에 저장하고 출력합니다.

import pipes

my_template = pipes.Template()
my_template.append('tr a-z A-Z', '--')
my_template.prepend('echo Python Programming', '--')  # 큐 맨 앞에 작업 추가
my_template.append('rev', '--')
my_template.debug(True)

my_file = my_template.open('test_file', 'w')
my_file.close()

content = open('test_file').read()
print(content)

실행 결과

$ python3 example.py
echo Python Programming |
tr a-z A-Z |
rev >test_file
+ rev
+ tr a-z A-Z
+ echo Python Programming
GNIMMARGORP NOHTYP

결과 해석:

  • echo Python Programming → 문자열 출력
  • tr a-z A-Z → 소문자를 대문자로 변환 (PYTHON PROGRAMMING)
  • rev → 문자열을 거꾸로 뒤집음 (GNIMMARGORP NOHTYP)

디버그 모드가 활성화되어 있기 때문에 실행되는 명령 시퀀스와 각 명령의 호출 순서가 화면에 함께 출력된 것을 확인할 수 있습니다.