Sortie en direct de la commande de sous-processus
Pour capturer à la fois la sortie en direct et la stocker pour la journalisation, utilisez l'une de ces approches :
Utiliser un itérateur
Créez un itérateur pour lire à partir du sous-traiter la sortie standard et y écrire simultanément :
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)
Utiliser un écrivain et un lecteur
Passer un écrivain au sous-processus et lire à partir d'un lecteur :
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())
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!