[파이썬] os `os.popen()`을 사용한 프로세스와 통신

os.popen()은 Python에서 외부 프로세스와 통신하기 위한 간단한 인터페이스를 제공하는 함수입니다. 이를 통해 다른 프로그램을 실행하고 그 프로그램의 입력과 출력을 제어할 수 있습니다. 이 블로그 포스트에서는 os.popen() 함수를 사용하여 프로세스와 통신하는 방법에 대해 알아보겠습니다.

os.popen() 함수

os.popen() 함수는 외부 프로그램을 실행하고 해당 프로그램의 입력과 출력 스트림을 제어합니다. 이 함수는 파이썬 3에서는 subprocess 모듈로 대체되었지만, 여전히 호환성을 유지하기 위해 사용할 수 있습니다.

import os

# 외부 프로그램 실행
process = os.popen("ls -l")

# 실행 결과 읽기
output = process.read()
print(output)

# 프로세스 종료
process.close()

위의 예시 코드에서는 ls -l 명령어를 실행하여 현재 디렉토리의 파일 목록을 가져옵니다. os.popen() 함수를 호출할 때 실행하고자 하는 명령어를 인자로 전달하면 해당 명령어가 실행되고, 실행 결과를 읽어올 수 있습니다.

입력과 출력 스트림 제어

os.popen() 함수를 사용하면 외부 프로세스의 입력과 출력 스트림을 제어할 수 있습니다. 예를 들어, 다음 코드는 사용자로부터 입력을 받아 grep 명령어로 필터링한 결과를 출력하는 프로그램입니다.

import os

# 사용자로부터 입력 받기
user_input = input("Enter a keyword: ")

# grep 명령어 실행
process = os.popen(f"grep {user_input} file.txt")

# 실행 결과 읽기
output = process.read()
print(output)

# 프로세스 종료
process.close()

위의 예시 코드에서는 grep 명령어로 file.txt 파일에서 사용자가 입력한 키워드를 필터링한 결과를 출력합니다. 사용자 입력을 input() 함수로 받아 os.popen() 함수에 전달하여 명령어를 실행하고, 실행 결과를 읽어옵니다.

보안 주의사항

외부 프로그램과의 통신은 보안상의 이슈를 야기할 수 있습니다. 특히 사용자 입력과 같은 외부로부터의 입력을 프로그램에 전달하는 경우, 인자를 안전하게 처리해야 합니다. 예를 들어, os.popen() 함수에 직접 사용자 입력을 전달하는 것은 보안 위험을 초래할 수 있습니다. 이러한 경우에는 subprocess 모듈의 run() 함수 등을 사용하여 더 안전하게 외부 프로세스를 실행하는 것을 권장합니다.

결론

os.popen() 함수를 사용하면 파이썬으로 다른 프로그램을 실행하고, 그 프로그램의 입력과 출력을 제어할 수 있습니다. 이를 통해 다양한 외부 프로그램과의 상호작용이 가능하며, 프로세스와의 통신에 대한 컨트롤을 갖게 됩니다. 하지만 외부 입력을 프로그램에 전달할 때 보안에 유의해야 하며, 인자 처리에 신경써야 합니다. 적절한 예외 처리와 보안 대책을 갖춘 코드 작성을 통해 안전하고 효율적인 프로세스 통신을 구현할 수 있습니다.