Vous pouvez utiliser subprocess.PIPE '' dans le sous-processus pour obtenir la sortie standard, mais il n'apparaîtra pas dans la console. Je voulais l'obtenir en tant que
str '' tout en l'affichant en temps réel sur la console, j'ai donc essayé de savoir comment le faire.
Celui qui utilise `` yield '' est meilleur.
Code
import sys
import subprocess
def run_and_capture(cmd):
'''
:param cmd:commande str à exécuter.
:rtype: str
:return:Sortie standard.
'''
#Voici le processus(Asynchrone)Début.
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
buf = []
while True:
#Lire une ligne dans le tampon.
line = proc.stdout.readline()
buf.append(line)
sys.stdout.write(line)
#Tampon vide+Fin du processus.
if not line and proc.poll() is not None:
break
return ''.join(buf)
if __name__ == '__main__':
msg = run_and_capture('du ~/')
print msg
stderr = subprocess.STDOUT
pour regrouper stderr dans stdout''. Join (buf)
Recommended Posts