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
Lepaskan: 2024-12-17 17:57:11
asal
265 orang telah melayarinya

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)
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan