Der Code ist der folgende (auf Python 2.7 Prompt)wie Subprocess.Popen das gesamte stdout abrufen?
import subprocess as sp
a = sp.Popen(['bash', '-c', 'ssh [REDACTED] cat text.txt'],
stdout=sp.PIPE, stderr=sp.PIPE)
print(a.communicate()[0])
ich dieses Programm erwarten würde die gesamte „text.txt“ Datei zu drucken, ist es jedoch die letzten Zeilen fehlt.
Die Datei text.txt befindet sich auf einem Remote-Server, von dem ich annehme, dass es der Kern davon ist. Wenn ich die Datei abrufe und dann subprocess.Popen lokal ausführe, funktioniert es wie erwartet.
Warum passiert es und wie kann ich es beheben?
Anmerkung: das Ergebnis ist das gleiche, wenn ich check_output
Wenn Sie diesen SSH-Befehl lokal ausführen, erhalten Sie die vollständige Datei oder fehlen auch die letzten Zeilen? – amiller27
Ich bekomme die vollständige Datei. Der Remote-Server macht vielleicht etwas Lustiges und sendet nicht alles irgendwie durch stdout? –
Was passiert, wenn Sie Folgendes ausführen: 'print (repro (subprocess.check_output (shlex.split ('ssh" cat text.txt "'))))'? –
jfs