Sortie en direct d'une commande de sous-processus
En Python, vous pouvez capturer la sortie d'une commande de sous-processus et produire simultanément une sortie de diffusion en direct à l'aide les approches suivantes :
Utiliser un Itérateur
import subprocess import sys p = subprocess.Popen(['command'], stdout=subprocess.PIPE) for line in iter(lambda: p.stdout.readline(1), ''): sys.stdout.buffer.write(line)
Utilisation d'un FileWriter et d'un FileReader
import io import time import subprocess import sys log = 'test.log' with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader: p = subprocess.Popen(['command'], stdout=writer) while p.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
Refactoring du code original
Dans votre code original, vous pouvez capturer la sortie en direct après avoir créé un sous-processus comme suit :
ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() for line in iter(lambda: ret_val.stdout.readline(1), ''): if line: print(line) log_file.write(line.decode())
Cette méthode vous permet de capturer à la fois les flux stdout et stderr et d'imprimer la sortie en direct tout en l'écrivant simultanément dans un fichier journal.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!