Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menangkap dan Log Output Langsung secara serentak daripada Subproses dalam Python?

Bagaimanakah Saya Boleh Menangkap dan Log Output Langsung secara serentak daripada Subproses dalam Python?

Linda Hamilton
Lepaskan: 2024-11-25 22:39:10
asal
632 orang telah melayarinya

How Can I Simultaneously Capture and Log Live Output from a Subprocess in Python?

Output Langsung daripada Perintah Subproses

Apabila menggunakan subproses.Popen untuk melaksanakan arahan luaran, ia menjadi mencabar untuk mendapatkan kedua-dua penstriman dan output output langsung storan untuk pengelogan dan semakan ralat. Artikel ini meneroka teknik untuk menangani isu ini, menyediakan penyelesaian yang secara serentak menangkap dan memaparkan output dalam masa nyata sambil mengekalkan keupayaan untuk menulisnya ke fail log.

Penyelesaian 1: Pendekatan Berasaskan Iterator

Satu kaedah melibatkan mencipta iterator daripada fungsi baca dan menulis output kepada kedua-dua output standard dan log fail:

import subprocess
import sys

with open("log.txt", "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)
Salin selepas log masuk

Dalam Python 3, gantikan "w" dengan "wb" untuk menyokong penulisan binari.

Penyelesaian 2: Pendekatan Fail Pembaca dan Penulis

Sebagai alternatif, fail pembaca dan penulis boleh digunakan untuk memisahkan stdout dan fail penulisan:

import io
import subprocess
import sys

filename = "log.txt"
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())
Salin selepas log masuk

Kaedah ini memastikan data ditulis pada kedua-dua output standard dan fail log, sambil menawarkan kelebihan membaca dan menulis tak segerak.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap dan Log Output Langsung secara serentak daripada Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan