Ich möchte die Ausgabe eines Befehls, den ich verwende os.system
, einer Variablen zuweisen und verhindern, dass sie auf dem Bildschirm ausgegeben wird. Im folgenden Code wird die Ausgabe jedoch an den Bildschirm gesendet und der Wert, für den gedruckt var
wird, ist 0, was vermutlich bedeutet, ob der Befehl erfolgreich ausgeführt wurde oder nicht. Gibt es eine Möglichkeit, die Befehlsausgabe der Variablen zuzuweisen und zu verhindern, dass sie auf dem Bildschirm angezeigt wird?
var = os.system("cat /etc/services")
print var #Prints 0
os.system
(nochos.popen
gemäß der Antwort, die Sie akzeptiert haben): Verwenden Siesubprocess.Popen
, es ist viel besser!subprocess.Popen
- einfach hinzufügenshell=True
!shell=True
ist (generell) eine sehr schlechte Idee! Sie müssen sehr sicher sein, was Sie ausführen :)Antworten:
Aus " Äquivalent von Bash Backticks in Python ", das ich vor langer Zeit gefragt habe, möchten Sie möglicherweise Folgendes verwenden
popen
:Aus den Dokumenten für Python 3.6 ,
Hier ist der entsprechende Code für
subprocess
:quelle
subprocess.check_output
Lösung näher an dem Pythonic-Einzeiler liegt, nach dem Sie anscheinend suchen, solange Sie sich nicht darum kümmernstderr
.os.popen
?shell=True
. Siehe docs.python.org/3/library/…shell=True
, sondern es ist auch in diesem Fall falsch.shell=True
macht die Shell eher zumcat
out
err
cat
Vielleicht möchten Sie sich auch das
subprocess
Modul ansehen , das die gesamte Familie derpopen
Aufrufe vom Typ Python ersetzt .Der Vorteil ist, dass es eine Menge Flexibilität gibt, wie Sie Befehle aufrufen, wo die Standard-In / Out / Error-Streams verbunden sind usw.
quelle
check_output
wurde mit Python 2.7 docs.python.org/2.7/library/…stderr=subprocess.STDOUT
, um auch Standardfehler zu erfassenDas Befehlsmodul ist eine relativ gute Möglichkeit, dies zu tun:
Status ist 0, Ausgabe ist der Inhalt von / etc / services.
quelle
Für Python 3.5+ wird empfohlen, die Ausführungsfunktion des Unterprozessmoduls zu verwenden . Dies gibt ein
CompletedProcess
Objekt zurück, von dem Sie leicht die Ausgabe sowie den Rückkehrcode erhalten können. Da Sie nur an der Ausgabe interessiert sind, können Sie einen solchen Utility-Wrapper schreiben.quelle
Ich weiß, dass dies bereits beantwortet wurde, aber ich wollte eine potenziell besser aussehende Möglichkeit vorstellen, Popen über die Verwendung von
from x import x
und Funktionen aufzurufen :quelle
cmd.py
, und dann schriebfrom cmd import cmdline
und verwendete ich es in meiner Hauptdatei nach Bedarf.Ich mache es mit der temporären Datei von os.system:
quelle
In Python 2.6 und 3 wird ausdrücklich empfohlen, die Verwendung von PIPE für stdout und stderr zu vermeiden.
Der richtige Weg ist
quelle