2010-07-02 19 views
7

Czy istnieje sposób programowego przerwania raw_input Pythona? W szczególności chciałbym przedstawić użytkownikowi monit, ale także odsłuchać deskryptor gniazda (używając na przykład select) i przerwać monity, wypisać coś i ponownie wyświetlić monit, jeśli dane wejdą do gniazda.Programowe przerywanie raw_input

Powodem użycia metody raw_input zamiast zwykłego robienia wyboru na sys.stdin jest to, że chciałbym użyć modułu readline, aby zapewnić funkcję edycji linii dla zachęty.

Odpowiedz

3

O ile wiem ... "Sort of".

raw_input blokuje, więc jedyny sposób, jaki mogę wymyślić, to utworzenie podprocesu/wątku w celu pobrania danych wejściowych, a następnie po prostu komunikacja z wątkiem/podprocesorem. To dość brudny hack (przynajmniej tak mi się wydaje), ale powinien działać na platformie. Inną alternatywą jest oczywiście użycie modułu curses na Linuksie lub uzyskanie this one dla Windows.

+0

Mam teraz do czynienia z tym samym problemem. Pomyślałem o pierwszym rozwiązaniu (wywołanie raw_input() w innym wątku), jednak po wyszukaniu dowiedziałem się, że nadal nie ma sposobu na przerwanie go, nawet po podniesieniu wyjątku z jednego wątku w innym (http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) nie umrze, gdy jest zajęty wywołaniem systemowym (a raw_input() klasyfikuje jako jeden, czyż nie? ?) ... :( – Sushi271

Powiązane problemy