Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Melaksanakan Tamat Masa Apabila Menggunakan Modul `subproses` Python?

Bagaimanakah Saya Boleh Melaksanakan Tamat Masa Apabila Menggunakan Modul `subproses` Python?

Linda Hamilton
Linda Hamiltonasal
2024-12-17 17:57:11270semak imbas

How Can I Implement Timeouts When Using Python's `subprocess` Module?

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

  • Alih keluar shell=True daripada anda panggilan subproses apabila boleh. Ini akan meningkatkan keselamatan dan prestasi.
  • Tingkah laku tamat masa mungkin berbeza-beza berdasarkan platform dan kerumitan proses. Lihat dokumentasi kegagalan tamat masa subproses untuk mendapatkan butiran lanjut.

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!

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