[파이썬] subprocess `subprocess.startupinfo`: 시작 정보 설정

subprocess 모듈은 다른 프로세스를 실행하고 상호작용하며 표준 입출력과 표준 에러를 처리하는 파이썬 내장 모듈입니다. subprocess.startupinfo 클래스는 subprocess를 사용하는 동안 프로세스의 시작 정보를 설정하는 데 사용됩니다.

시작 정보 설정은 다음과 같은 기능들을 포함합니다:

1. 프로세스에 대한 윈도우 보안 옵션 설정

subprocess.startupinfo 클래스를 사용하면 실행된 프로세스에 대한 윈도우 보안 옵션을 설정할 수 있습니다. 예를 들어, 프로세스가 백그라운드에서 실행되도록 하거나 표시되지 않도록 할 수 있습니다.

import subprocess

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE

subprocess.call(["ls", "-l"], startupinfo=startupinfo)

위의 예제에서는 subprocess.STARTUPINFO()를 사용하여 새로운 시작 정보 객체를 생성하고, dwFlags 속성을 subprocess.STARTF_USESHOWWINDOW에 대한 비트 OR 연산을 사용하여 설정했습니다. 이를 통해 프로세스 실행 시 윈도우 창을 숨길 수 있습니다.

2. 입출력 및 에러 스트림 관리

subprocess.startupinfo 객체를 사용하면 프로세스의 표준 입력(stdin), 표준 출력(stdout) 및 표준 에러(stderr) 스트림 관리를 할 수 있습니다.

import subprocess

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESTDHANDLES
startupinfo.hStdInput = subprocess.PIPE
startupinfo.hStdOutput = subprocess.PIPE
startupinfo.hStdError = subprocess.PIPE

process = subprocess.Popen(["echo", "Hello, World!"], startupinfo=startupinfo)
output, error = process.communicate()

print("Output:", output.decode())
print("Error:", error.decode())

위의 예제에서는 subprocess.STARTUPINFO() 객체를 생성하고, dwFlags 속성을 subprocess.STARTF_USESTDHANDLES에 대한 비트 OR 연산을 사용하여 설정했습니다. 그 후, hStdInput, hStdOutput, hStdError 속성을 각각 subprocess.PIPE로 설정하여 프로세스의 입출력 및 에러 스트림을 파이프로 리다이렉트합니다.

subprocess.Popen을 사용하여 프로세스를 실행하고, communicate를 호출하여 프로세스의 출력 및 에러를 가져옵니다.

3. 환경 변수 설정

subprocess.startupinfo 객체를 사용하여 실행되는 프로세스의 환경 변수도 설정할 수 있습니다.

import subprocess

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
startupinfo.environ = {"PATH": "/usr/bin"}

subprocess.call(["ls", "-l"], startupinfo=startupinfo)

위의 예제에서는 environ 속성을 사용하여 프로세스의 환경 변수를 설정했습니다. 이를 통해 프로세스를 실행하는 동안 특정 환경 변수를 임의로 변경할 수 있습니다.

결론

subprocess.startupinfo 클래스를 사용하여 Python에서 다른 프로세스를 실행할 때 강력한 시작 정보 설정을 수행할 수 있습니다. 이를 통해 프로세스의 윈도우 보안 옵션, 입출력 및 에러 스트림 처리, 환경 변수 등을 적절하게 제어할 수 있습니다. 이러한 기능은 프로그래밍 언어와 상호작용하거나 외부 프로그램을 자동화하는 데 유용합니다.