Python - Wie nennen bash-Befehlen mit pipe?
Kann ich dies in der Regel auf der Kommandozeile in Linux:
$ tar c my_dir | md5sum
Aber wenn ich versuche, rufen Sie es mit Python bekomme ich eine Fehlermeldung:
>>> subprocess.Popen(['tar','-c','my_dir','|','md5sum'],shell=True)
<subprocess.Popen object at 0x26c0550>
>>> tar: You must specify one of the `-Acdtrux' or `--test-label' options
Try `tar --help' or `tar --usage' for more information.
- Warum sind Sie hashing eine tar-Datei? Meinst du auf der Suche nach Veränderungen im Inhalt der Datei? oder überprüfen, ob eine extern erstellte tar-Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie
subprocess.PIPE
auch den split-Befehl verwenden, sollten Sieshlex.split()
um zu verhindern, dass merkwürdige Verhaltensweisen in einigen Fällen:Sondern um ein Archiv und generieren der Checksumme, sollten Sie die Verwendung von Python built-in Module
tarfile
undhashlib
anstelle von aufrufen von shell-Befehlen.open()
und dann hash seines Inhalts.tar -c mydir | md5sum
. Vielleicht könnten Sie beginnen eine neue Frage, darunter eine interaktive terminal-session, wo Sie diesen Befehl ausführen, starten Sie Python, und führen Sie die Python-Befehle, anzeigen der Ausgabe.Ok, ich bin nicht sicher, warum, aber dies scheint zu funktionieren:
Jemand wissen, warum der ursprüngliche code nicht funktioniert?
|
. Popen fordert, den Prozess und übergibt die Argumente direkt. Für Popen dies wird gesteuert mitshell=
und übergeben ein string (keine Liste), IIRC.Was Sie eigentlich wollen, ist, eine shell zu starten Teilprozess mit dem shell-Befehl als parameter: