Dalam Python, fungsi raw_input() menjeda pelaksanaan skrip sehingga pengguna menyediakan beberapa bentuk input. Walau bagaimanapun, bagaimana jika anda ingin menetapkan had masa pada input ini untuk mengelakkan skrip daripada digantung selama-lamanya?
Melaksanakan Had Masa
Satu pendekatan, terpakai untuk sistem berasaskan Unix, ialah menggunakan fungsi signal.alarm. Apabila dipanggil dengan had masa dalam beberapa saat, fungsi ini menimbulkan pengecualian KeyboardInterrupt selepas tempoh yang ditetapkan, dengan berkesan melangkau panggilan raw_input().
Penyelesaian Merentas Platform
Untuk keserasian merentas platform atau jika anda menggunakan Windows, kaedah alternatif ialah menggunakan threading.Timer dalam kombinasi dengan thread.interrupt_main .
import thread import threading def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) astring = None try: timer.start() astring = input(prompt) except KeyboardInterrupt: pass timer.cancel() return astring
Perhatikan bahawa pendekatan ini memperlakukan kedua-dua input yang dimulakan pengguna dan tamat masa secara sama, mengembalikan Tiada untuk kedua-dua senario. Jika anda perlu membezakan antara kes ini, anda boleh mengubah suai kod untuk menetapkan bendera apabila tamat masa berlaku dan mengendalikannya secara berasingan dalam pengendali KeyboardInterrupt.
Pelaksanaan Khusus Windows
Untuk penyelesaian khusus Windows, anda boleh memanfaatkan gelung yang meninjau msvcrt.kbhit untuk menyemak input pengguna sambil memantau masa untuk pastikan tamat masa dikuatkuasakan.
import msvcrt import time def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') finishat = time.time() + timeout result = [] while True: if msvcrt.kbhit(): result.append(msvcrt.getche()) if result[-1] == '\r': return ''.join(result) time.sleep(0.1) else: if time.time() > finishat: return None
Pertimbangkan Nilai Lalai
Jika anda ingin mengelak daripada mengembalikan Tiada apabila tamat masa, anda boleh mengubah suai kod untuk menentukan nilai lalai alternatif untuk dikembalikan dalam kes sedemikian.
Penyesuaian Lanjutan
Untuk mengelakkan had masa daripada dikenakan kepada pengguna yang hanya menaip perlahan, anda boleh mengira semula tamat masa selepas setiap input aksara, memastikan pemasa sahaja tamat tempoh jika input benar-benar dijeda untuk tempoh lanjutan.
Atas ialah kandungan terperinci Bagaimanakah anda boleh menetapkan had masa pada input pengguna dalam fungsi `raw_input()` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!