Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mencapai Bacaan Tidak Menyekat daripada Paip Subproses dalam Python?

Bagaimanakah Saya Boleh Mencapai Bacaan Tidak Menyekat daripada Paip Subproses dalam Python?

DDD
Lepaskan: 2024-12-19 13:55:11
asal
773 orang telah melayarinya

How Can I Achieve Non-Blocking Reads from Subprocess Pipes in Python?

Bacaan Tidak Menyekat pada Paip Subproses dalam Python

Paip subproses menyediakan cara untuk berkomunikasi dengan program luaran dari dalam Python. Walau bagaimanapun, membaca daripada output standard secara lalai menyekat proses sehingga data tersedia. Untuk aplikasi yang memerlukan bacaan tanpa sekatan, terdapat beberapa pendekatan yang perlu dipertimbangkan.

Elakkan fcntl, pilih dan asyncproc

Walaupun lazimnya dicadangkan, fcntl, pilih dan asyncproc mungkin tidak sesuai untuk senario ini. fcntl dan pilih memerlukan kod khusus platform, manakala asyncproc bergantung pada pemproses berbilang, yang boleh memperkenalkan overhed tambahan dan berinteraksi dengan buruk dengan paip.

Penyelesaian Berasaskan Barisan

Satu yang boleh dipercayai dan penyelesaian mudah alih ialah menggunakan panggilan Queue.get_nowait(). Begini caranya:

from queue import Queue, Empty
from subprocess import PIPE, Popen
from threading import Thread

# Initialize a subprocess and a queue for output
p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1)
q = Queue()

# Create a thread to enqueue output from the subprocess
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True
t.start()

# Read the queue in a non-blocking manner
try:
    line = q.get_nowait()
except Empty:
    print('No output yet')
else:
    # ... process the output line
Salin selepas log masuk

Dalam pendekatan ini, urutan berasingan digunakan untuk memasukkan keluaran daripada subproses ke dalam baris gilir. Proses utama kemudiannya boleh cuba mendapatkan data dari baris gilir tanpa menyekat. Jika baris gilir kosong, ia mengembalikan pengecualian Kosong.

Penyelesaian ini mudah alih dan cekap, dan ia membenarkan bacaan tanpa sekatan pada paip subproses tanpa memerlukan kod khusus platform atau kebergantungan tambahan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Bacaan Tidak Menyekat daripada Paip 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