Ich versuche, die Ausgabe eines Befehls zu einer Variablen ohne den Befehl zu übergeben, der denkt, dass es piped ist. Der Grund dafür ist, dass der fragliche Befehl unformatierten Text als Ausgabe gibt, wenn er ausgegeben wird, aber es gibt farbig formatierten Text, wenn er vom Terminal aus ausgeführt wird. Ich brauche diesen farbig formatierten Text.Python 3.4.3 subprocess.Popen Ausgabe des Befehls ohne Piping erhalten?
Bis jetzt habe ich ein paar Dinge ausprobiert. Ich habe versucht, Popen wie so:
output = subprocess.Popen(command, stdout=subprocess.PIPE)
output = output.communicate()[0]
output = output.decode()
print(output)
Dies läßt mich die Ausgabe drucken, aber es gibt mir die unformatierte Ausgabe, die ich bekomme, wenn der Befehl geleitet wird. Das macht Sinn, da ich es hier im Python-Code übergebe. Aber ich bin neugierig, ob es eine Möglichkeit gibt, die Ausgabe dieses Befehls direkt einer Variablen zuzuordnen, ohne dass der Befehl die verrohrte Version von sich selbst ausführt.
Ich habe auch versucht, die folgende Version, die statt auf check_output beruht:
output = subprocess.check_output(command)
output = output.decode()
print(output)
Und wieder ich die gleiche unformatierte Ausgabe zu erhalten, die den Befehl, wenn der Befehl geleitet wird.
Gibt es eine Möglichkeit, die formatierte Ausgabe zu erhalten, die Ausgabe, die der Befehl normalerweise vom Terminal geben würde, wenn es nicht verrohrt wird?
Ich denke, die "Färbung" ist eine Funktion der Shell/Tty. Die Farben sind nicht Teil der Befehlsausgabe. Sie können also nichts anderes als diese unformatierte Ausgabe abrufen. – GhostCat
Hallo EddyG, manchmal stimmt das, aber Sie können selbst Farbcode an das Terminal senden. Das ist in diesem Fall der Fall. Ich überprüfte die C-Quelle des Befehls selbst und es sendet tatsächlich den Farbformatierungscode. Es ist also nicht nur die Tastatur. – nullified
verwandt: [Letzte ungepufferte Zeile kann nicht gelesen werden] (http://stackoverflow.com/q/25923901/4279) – jfs