Modul subproses Python dan Tamat Masa
Modul subproses menawarkan cara yang mudah untuk melaksanakan perintah luaran, menangkap outputnya dan mengurus kitaran hayatnya. Walau bagaimanapun, secara lalai, kaedah communicate()nya tidak menyokong tamat masa. Ini menimbulkan cabaran apabila melaksanakan arahan yang berjalan lama yang mungkin boleh menyebabkan proses panggilan buntu.
Melaksanakan Tamat Masa dengan check_output
Python 3.3 dan kemudiannya menyediakan check_output() sebagai alternatif yang lebih cekap kepada Popen() dan berkomunikasi(). Fungsi ini menilai perintah, menggabungkan output stdout dan stderrnya ke dalam rentetan bait, dan menimbulkan CalledProcessError jika arahan keluar dengan status bukan sifar. Yang penting, ia juga menyokong tamat masa, membolehkan anda menentukan masa pelaksanaan maksimum untuk perintah itu.
from subprocess import STDOUT, check_output seconds = 10 # Timeout in seconds output = check_output(cmd, stderr=STDOUT, timeout=seconds)
Dalam contoh ini, fungsi check_output() akan melaksanakan perintah yang dinyatakan dalam cmd dan menunggu sehingga ia selesai dalam masa 10 saat. Jika arahan mengambil masa lebih lama daripada 10 saat, ralat TimeoutExpired akan dinaikkan.
Menggunakan subprocess32 untuk Timeouts dalam Python 2.x
Untuk Python 2.x, subprocess32 backport menyediakan fungsi tamat masa yang sama seperti check_output() dalam Python 3.3 . Untuk memasang subprocess32, gunakan pip:
pip install subprocess32
Setelah dipasang, anda boleh menggunakan fungsi call() subprocess32 untuk melaksanakan arahan dengan tamat masa:
import subprocess32 seconds = 10 # Timeout in seconds subprocess32.call(cmd, timeout=seconds)
Pertimbangan Tambahan
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Tamat Masa Apabila Menggunakan Modul `subproses` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!