[파이썬] subprocess `subprocess.Popen` 객체의 `stdin` 속성

Python에서 subprocess 모듈은 외부 프로세스와 상호 작용하기 위한 강력한 도구를 제공합니다. 이 모듈을 사용하면 Python 스크립트에서 다른 프로그램을 실행하고 결과를 가져올 수 있습니다. subprocess.Popen 클래스는 외부 프로세스를 실행하는 데 사용되는 중요한 클래스 중 하나입니다.

subprocess.Popen 객체는 외부 프로세스와의 통신을 담당합니다. 이 객체에는 다양한 속성과 메서드가 있지만, 이 글에서는 stdin 속성에 대해 자세히 알아보겠습니다.

stdin 속성

stdin 속성은 subprocess.Popen 객체의 입력 스트림을 나타냅니다. 이 속성은 외부 프로세스로 데이터를 전달하기 위해 사용됩니다.

예를 들어, 다음 코드는 subprocess.Popen 객체로 외부 프로세스를 실행하고 stdin 속성을 사용하여 입력 데이터를 전달하는 예제입니다.

import subprocess

# 외부 프로세스 실행
process = subprocess.Popen(["ls"], stdin=subprocess.PIPE)

# 입력 데이터 전송
input_data = "Hello World!".encode('utf-8')
process.stdin.write(input_data)
process.stdin.close()

# 프로세스 출력 확인
output = process.communicate()[0]
print(output.decode('utf-8'))

위의 예제에서 subprocess.Popen(["ls"], stdin=subprocess.PIPE)ls 명령어를 실행하는 외부 프로세스를 생성합니다. stdin 속성에는 subprocess.PIPE를 할당하여 입력 데이터를 전달할 수 있도록 합니다.

stdin 속성에 데이터를 전달하기 위해 write 메서드를 사용할 수 있습니다. 이 때, 데이터는 바이트로 인코딩되어야 하므로, utf-8 등의 적절한 인코딩 방식을 사용하여 변환해야 합니다.

데이터 전송이 완료되면, stdin 스트림을 닫아야 합니다. 이는 stdin.close()를 호출하여 수행할 수 있습니다.

마지막으로, communicate() 메서드를 사용하여 프로세스의 출력을 확인할 수 있습니다. 위의 예제에서는 해당 출력을 변수 output에 저장하고, 이를 디코딩하여 출력합니다.

subprocess.Popen 객체의 stdin 속성은 외부 프로세스와의 통신을 위해 중요한 역할을 합니다. 적절한 데이터를 입력으로 전달하고, 출력을 적절하게 처리하는 것은 프로세스 간 상호 작용의 핵심입니다.