Lors de l'appel d'un sous-processus à l'aide de subprocess.Popen, nous pouvons simultanément stocker sa sortie à des fins de journalisation et l'afficher en direct sur le terminal.
Option 1 : Utiliser Itérateurs
import subprocess import sys with open("test.log", "wb") as f: process = subprocess.Popen(your_command, stdout=subprocess.PIPE) for c in iter(lambda: process.stdout.read(1), b""): sys.stdout.buffer.write(c) f.buffer.write(c)
Option 2 : Utiliser un lecteur et un écrivain
import io import time import subprocess import sys filename = "test.log" with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader: process = subprocess.Popen(command, stdout=writer) while process.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
Option 3 : Solution personnalisée
ret_val = subprocess.Popen(run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True) while not ret_val.poll(): log_file.flush()
Dans un autre terminal, exécutez :
tail -f log.txt
Avec ceux-ci méthodes, vous pouvez capturer la sortie du sous-processus tout en l'affichant en direct, garantissant à la fois la journalisation et le suivi de la progression.
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!