Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh menetapkan had masa pada input pengguna dalam fungsi `raw_input()` Python?

Bagaimanakah anda boleh menetapkan had masa pada input pengguna dalam fungsi `raw_input()` Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-18 22:45:02945semak imbas

How can you set a time limit on user input in Python's `raw_input()` function?

Menyesuaikan Input Mentah dengan Kekangan Masa

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!

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