Python subprocess: How to pipe one process output into another process input
This is an example of how to start a process whose output is piped into another subprocess input, whose output is passed to Python.
In this example, the process will use xz
to stream-decompress data from input.txt.xz
, which is in turn passed to sha512sum
to compute the SHA512 checksum of the uncompressed input data.
An equivalent shell command would be xz --decompress --stdout input.txt.xz | sha512sum
.
Full source code
import subprocess
file_path = "input.txt.xz"
# Decompress the file on the fly and compute the SHA512 checksum
decompress_process = subprocess.Popen(['xz', '--decompress', '--stdout', file_path], stdout=subprocess.PIPE)
checksum_process = subprocess.run(['sha512sum'], stdin=decompress_process.stdout, stdout=subprocess.PIPE, text=True)
decompress_process.stdout.close()
decompress_process.wait()
# Extract the SHA512 checksum from the command output
sha512sum = checksum_process.stdout.split()[0]
print(sha512sum)