Sie können subprocess.PIPE
im Unterprozess verwenden, um die Standardausgabe zu erhalten, diese wird jedoch nicht in der Konsole angezeigt.
Ich wollte es als str
erhalten, während ich es in Echtzeit auf der Konsole anzeigte, also versuchte ich herauszufinden, wie es geht.
Dieser mit "Ertrag" ist besser.
Code
import sys
import subprocess
def run_and_capture(cmd):
'''
:param cmd:str auszuführender Befehl.
:rtype: str
:return:Standardausgabe.
'''
#Hier der Prozess(Asynchron)Start.
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
buf = []
while True:
#Lesen Sie eine Zeile aus dem Puffer.
line = proc.stdout.readline()
buf.append(line)
sys.stdout.write(line)
#Puffer leeren+Ende des Prozesses.
if not line and proc.poll() is not None:
break
return ''.join(buf)
if __name__ == '__main__':
msg = run_and_capture('du ~/')
print msg
subprocess.Popen (cmd, ...)
stderr = subprocess.STDOUT
, um stderr in stdout zu gruppieren stdout = subprocess.PIPE
Popen.stdout.readline ()
weiter''. Join (buf)
Recommended Posts