[파이썬] subprocess `subprocess.Popen()`: 기본 사용법

Python provides the subprocess module that allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. One of the most commonly used functions in the subprocess module is subprocess.Popen(). In this blog post, we will explore the basic usage of subprocess.Popen() in Python.

Executing an External Command

The subprocess.Popen() function is used to execute an external command and obtain the output. Here’s a basic example:

import subprocess

command = "ls -l"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()

if error.decode():
    print(f"Error: {error.decode()}")
else:
    print(f"Output:\n{output.decode()}")

In this example, the ls -l command is executed using the subprocess.Popen() function. We set shell=True to run the command in a shell environment. The stdout=subprocess.PIPE argument captures the command’s standard output, while stderr=subprocess.PIPE captures the standard error.

After executing the command, we obtain the output and error (if any) by calling the communicate() method on the process object. We then decode the output and error strings and print them.

Handling Input and Output

You can also provide input to the command and read its output in real-time. Here’s an example of how you can achieve this:

import subprocess

command = "grep 'example' input.txt"
process = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate(input="This is an example input")

if error.decode():
    print(f"Error: {error.decode()}")
else:
    print(f"Output:\n{output.decode()}")

In this example, we execute a command using subprocess.Popen() and provide input to it using the stdin parameter. The output is captured and printed in a similar manner as before.

Conclusion

The subprocess.Popen() function is a powerful tool in Python for executing external commands and managing their input/output streams. It allows you to automate tasks that involve interacting with other programs from your Python scripts.

In this blog post, we covered the basic usage of subprocess.Popen(), including executing commands and handling input/output. There are many more advanced features available in the subprocess module, so make sure to check out the official Python documentation for more information.

Remember to always review and validate user-provided input when using subprocess.Popen() to prevent any security vulnerabilities in your code.