[파이썬] subprocess에서의 스트림 리다이렉션

파이썬에서 subprocess 모듈은 외부 프로세스를 실행하고 통신하는 데 사용됩니다. subprocess 모듈은 입력출력 스트림을 관리할 수 있는 많은 기능을 제공합니다. 이 글에서는 subprocess 모듈을 사용하여 스트림 리다이렉션을 어떻게 수행하는지 살펴보겠습니다.

스트림 리다이렉션은 표준 입력, 출력 및 오류 스트림의 방향을 변경하는 것을 의미합니다. 이는 외부 프로세스가 데이터를 받거나 출력할 때 스트림을 다른 소스로 리다이렉션할 수 있게 해줍니다.

예를 들어, 다음과 같은 형식으로 외부 명령어를 실행할 수 있습니다.

import subprocess

subprocess.run(["command", "arg1", "arg2"])

이제 실행한 외부 명령어의 표준 출력을 캡처하기 위해 subprocess.run()stdout 인자를 사용해 보겠습니다.

import subprocess

result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE)
output = result.stdout.decode()
print(output)

위 코드에서 subprocess.PIPEstdout 인자로 전달하면 외부 명령어의 표준 출력을 캡처할 수 있습니다. decode() 함수를 사용하여 바이트열을 문자열로 디코딩한 후 출력합니다.

이번에는 외부 명령어의 표준 입력을 리다이렉션하여 값을 전달하는 방법을 살펴보겠습니다.

import subprocess

result = subprocess.run(["grep", "pattern"], input="search text", text=True, capture_output=True)
output = result.stdout
print(output)

위 코드에서 input 인자를 사용하여 외부 명령어로 전달할 표준 입력 값을 지정할 수 있습니다. text 인자를 True로 설정하여 표준 출력을 문자열로 받을 수 있습니다. capture_output 인자를 True로 설정하면 표준 출력과 오류 스트림을 캡처합니다.

스트림 리다이렉션은 파이썬의 subprocess 모듈을 사용하여 외부 프로세스와 통신하는 데 유용한 기능입니다. 위 예제들을 활용하여 스트림 리다이렉션을 통해 외부 프로세스와 상호작용하는 방법을 익힐 수 있습니다.