Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Melakukan Bacaan Tidak Menyekat daripada Strim Output Subproses dalam Python?

Bagaimanakah Saya Boleh Melakukan Bacaan Tidak Menyekat daripada Strim Output Subproses dalam Python?

DDD
Lepaskan: 2024-12-17 22:06:12
asal
201 orang telah melayarinya

How Can I Perform Non-Blocking Reads from a Subprocess's Output Stream in Python?

Bacaan Tidak Menyekat pada Aliran Output Subproses dalam Python

Dalam Python, modul subproses menyediakan cara yang mudah untuk melancarkan dan berinteraksi dengan luaran proses. Walau bagaimanapun, adalah penting untuk mengendalikan interaksi I/O antara proses ibu bapa dan anak dengan cekap.

Pertimbangkan senario berikut: anda ingin melakukan bacaan tanpa sekatan pada aliran keluaran standard subproses. Secara lalai, p.stdout.readline() menyekat sehingga data tersedia dalam penimbal. Untuk menangani perkara ini, kita boleh menggunakan teknik yang melibatkan urutan dan baris gilir yang berasingan.

Mula-mula, buat baris gilir untuk menyimpan baris output:

1

from Queue import Queue

Salin selepas log masuk

Seterusnya, mulakan urutan yang berbunyi baris daripada stdout subproses dan masukkan baris gilirnya:

1

2

3

4

def enqueue_output(out, queue):

    for line in iter(out.readline, b''):

        queue.put(line)

    out.close()

Salin selepas log masuk

Mulakan subproses dan mulakan benang:

1

2

3

4

5

p = Popen(['myprogram.exe'], stdout=PIPE)

q = Queue()

t = Thread(target=enqueue_output, args=(p.stdout, q))

t.daemon = True

t.start()

Salin selepas log masuk

Untuk membaca baris tanpa sekatan, gunakan yang berikut:

1

2

3

4

5

6

try:

    line = q.get_nowait()  # or q.get(timeout=.1)

except Empty:

    print('no output yet')

else:  # got line

    # do something with the line

Salin selepas log masuk

Kaedah ini serasi merentas platform dan memastikan bacaan tanpa sekatan, membolehkan anda dengan cekap memproses data daripada subproses.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Bacaan Tidak Menyekat daripada Strim Output Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan