Teilprozess.check_output() scheint nicht zu existieren (Python 2.6.5)
Habe ich seit der Lektüre der Python-Dokumentation über den subprocess-Modul (siehe hier) und es spricht über eine subprocess.check_output()
Befehl, das scheint zu sein, genau das was ich brauche.
Jedoch wenn ich versuchen und verwenden Sie es, bekomme ich eine Fehlermeldung, dass es nicht existiert, und wenn ich laufen dir(subprocess)
ist es nicht aufgeführt.
Ich bin mit Python 2.6.5, und der code, den ich verwendet habe ist unter:
import subprocess
subprocess.check_output(["ls", "-l", "/dev/null"])
Hat jemand eine Idee, warum dies passiert ist?
InformationsquelleAutor robintw | 2011-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wurde eingeführt, 2.7 Finden Sie in der docs.
Verwenden Teilprozess.Popen wenn Sie möchten, dass der Ausgang:
CalledProcessError
wenn der Prozess gibt return-code ungleich null.natürlich, weil es einen großen Unterschied zwischen Ihnen, und zwar: blockierende und nicht-blockierende. Sie sind für verschiedene Anwendungsfälle!
Ich schob es in eine
lambda
wie diese:check_output = lambda args: Popen(args, stdout = PIPE).communicate()[0]
. Nur weil ich bin in einem interaktiven interpreter, und es ist ein PITA zu schreiben, die multiline-Funktion defs in den. Ich verwendetfrom subprocess import Popen, PIPE
früher in der Sitzung.wie man einen ping dann?? kann ich trotzdem mit Popen oder?
InformationsquelleAutor user225312
WENN es ist verwendet schwer in den code, den Sie ausführen möchten aber, dass der code nicht langfristig gehalten werden (oder Sie brauchen eine schnelle Lösung, unabhängig von möglichen Wartungs-Kopfschmerzen in der Zukunft), dann könnte man die Ente punch (aka monkey patch) wo Teilprozess importiert...
Hebe einfach den code aus 2.7 und legen Sie es so...
Kleine zappeln kann erforderlich sein.
Bedenken Sie aber die Beweislast liegt bei Ihnen zu halten dirty little backports wie diese. Wenn Fehler entdeckt werden und korrigiert in der neuesten python-dann sind Sie a) zu beachten ist, und b) aktualisieren Sie Ihre version, wenn Sie wollen, bleiben Sie sicher. Auch das überschreiben & Definition der internen Funktionen selbst ist der nächste Kerl ist der Schlimmste Alptraum, vor allem, wenn der nächste Kerl SIE mehrere Jahre auf der Linie, und Sie haben vergessen alles über die grody-hacks, die Sie das Letzte mal Tat! Zusammenfassend: es ist sehr selten eine gute Idee.
Hinweis: CalledProcessError nicht akzeptieren, eine Ausgabe, die in python 2.6. (Ich bin sofort gebissen nach der Verwendung dieser hack! 🙁 )
cpython ist jetzt auch auf GitHub -
check_output
für Python 2.7 ist derzeit der hier: github.com/python/cpython/blob/2.7/Lib/subprocess.py#L194InformationsquelleAutor technicalbloke
Dank der monkey-patch-Vorschlag (und meine versuche scheitern - aber wir waren konsumieren CalledProcessError Ausgang, so mussten monkey-patch)
fand eine Arbeit 2.6-patch hier:
http://pydoc.net/Python/pep8radius/0.9.0/pep8radius.shell/
InformationsquelleAutor keen