Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memaparkan Output Program Masa Nyata dengan `subproses` Python?

Bagaimana untuk Memaparkan Output Program Masa Nyata dengan `subproses` Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 09:55:02942semak imbas

How to Display Real-time Program Output with Python's `subprocess`?

Mengakses Output Program Masa Nyata dengan Subproses

Soalan:

Bagaimana kita boleh mendapatkan output program masa nyata menggunakan subproses dalam Python? Secara khususnya, bagaimanakah kita boleh memaparkan kemajuan program baris arahan tanpa menimbal output?

Jawapan:

Untuk mendapatkan output masa nyata daripada program yang dilaksanakan dengan subproses, kita boleh menggunakan teknik berikut:

import subprocess

p = subprocess.Popen('svnadmin verify /var/svn/repos/config',
                     stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True,
                     bufsize=0)  # Set bufsize to 0 for no buffering

while True:
    line = p.stdout.readline()
    if not line:
        break
    print(line.replace('\n', ''))

Penjelasan:

  • Kami menetapkan bufsize kepada 0 dalam Popen untuk melumpuhkan penimbalan output.
  • Dalam gelung while, kami terus membaca baris daripada p.stdout menggunakan readline().
  • Jika tiada baris tersedia, gelung terputus dan program keluar.
  • Kami boleh memproses atau paparkan setiap baris semasa ia diterima, memberikan output masa nyata.

Nota:

  • Kaedah ini mungkin tidak berfungsi pada semua sistem atau dengan semua program.
  • Untuk Python 3.8 dan ke atas, pertimbangkan untuk menggunakan asyncio dan bukannya deskriptor fail mentah untuk mengendalikan output subproses.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Output Program Masa Nyata dengan `subproses` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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