[파이썬] subprocess `subprocess.encoding`: 입/출력 인코딩 설정

In Python, the subprocess module provides a way to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. The subprocess module allows you to run system commands and interact with them programmatically.

One important aspect of working with subprocesses is handling input/output encoding. By default, subprocesses inherit the encoding of the parent process. However, there might be cases where you need to configure or change the encoding settings for input/output operations.

In Python 3.6 and above, the subprocess module provides the subprocess.encoding attribute, which allows you to specify input/output encoding when creating and interacting with subprocesses.

Setting Input Encoding

When running a subprocess that requires input from the parent process, you can set the input encoding using the encoding parameter of the subprocess.Popen constructor. This ensures that any text sent to the subprocess is encoded using the specified encoding.

import subprocess

# Set the input encoding to UTF-8
process = subprocess.Popen(['command'], stdin=subprocess.PIPE, encoding='utf-8')

# Send text input to the subprocess
process.stdin.write("Hello, subprocess!")
process.stdin.close()

# Wait for the subprocess to complete
process.wait()

In the above example, we set the input encoding to UTF-8 by passing encoding='utf-8' to the subprocess.Popen constructor. This ensures that any text sent to the subprocess using the stdin pipe is encoded as UTF-8.

Setting Output Encoding

Similarly, you can specify the desired output encoding when working with the stdout and stderr pipes of a subprocess. This allows you to ensure that the output of the subprocess is decoded correctly.

import subprocess

# Set the output encoding to UTF-8
process = subprocess.Popen(['command'], stdout=subprocess.PIPE, encoding='utf-8')

# Read the output of the subprocess
output = process.stdout.read()

# Print the decoded output
print(output)

In the above example, we set the output encoding to UTF-8 by passing encoding='utf-8' to the subprocess.Popen constructor. This ensures that the output read from the stdout pipe is decoded as UTF-8.

Conclusion

With the subprocess.encoding attribute in Python, you can easily configure the input/output encoding settings when working with subprocesses. This ensures that text input to the subprocess is encoded correctly and output from the subprocess is decoded correctly, regardless of the default encoding of the parent process.

By leveraging the subprocess.encoding attribute, you can handle different encodings and interact with subprocesses in a more flexible and reliable manner.