Python subprocess: Wie man die Ausgabe eines Prozesses in die Eingabe eines anderen Prozesses piped

Dies ist ein Beispiel, wie man einen Prozess startet, dessen Ausgabe in die Eingabe eines anderen Subprozesses gepiped wird, dessen Ausgabe an Python übergeben wird.

In diesem Beispiel wird der Prozess xz verwenden, um Daten aus input.txt.xz zu dekomprimieren, die wiederum an sha512sum übergeben werden, um die SHA512-Prüfsumme der unkomprimierten Eingabedaten zu berechnen.

Ein äquivalenter Shell-Befehl wäre xz --decompress --stdout input.txt.xz | sha512sum.

Vollständiger Quellcode

pipe_example.py
import subprocess

file_path = "input.txt.xz"

# Die Datei on-the-fly dekomprimieren und die SHA512-Prüfsumme berechnen
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()

# SHA512-Prüfsumme aus der Befehlsausgabe extrahieren
sha512sum = checksum_process.stdout.split()[0]

print(sha512sum)

Check out similar posts by category: Python