2010-07-02 8 views
7

Gibt es eine Möglichkeit programmgesteuert Pythons Raw_input zu unterbrechen? Insbesondere möchte ich dem Benutzer eine Eingabeaufforderung präsentieren, aber auch einen Socket-Deskriptor abhören (z. B. mit select) und die Eingabeaufforderung unterbrechen, etwas ausgeben und die Eingabeaufforderung erneut anzeigen, wenn Daten im Socket eingehen.Programmgesteuertes Unterbrechen von raw_input

Der Grund für die Verwendung von raw_input, anstatt einfach auf sys.stdin zu tun, ist, dass ich das readline-Modul verwenden möchte, um Zeilenbearbeitungsfunktionen für die Eingabeaufforderung bereitzustellen.

Antwort

3

Soweit ich weiß ... "Sort of".

raw_input blockiert, so ist die einzige Möglichkeit, die ich denken kann, ist ein Subprozess/Thread zum Abrufen der Eingabe, und dann einfach mit dem Thread/Subprozess kommunizieren. Es ist ein ziemlich schmutziger Hack (zumindest scheint es mir so), aber es sollte plattformübergreifend funktionieren. Die andere Alternative ist natürlich, entweder das Curses-Modul auf Linux zu verwenden oder this one für Windows zu erhalten.

+0

Ich bin im Augenblick das gleiche Problem konfrontiert. Ich dachte an die erste Lösung (raw_input() in einem anderen Thread aufrufen), aber nach der Suche fand ich heraus, dass es immer noch keine Möglichkeit gibt, es zu unterbrechen, auch nach dem Auslösen einer Ausnahme von einem Thread in einem anderen (http://stackoverflow.com)/questions/323972/is-there-any-way-to-kill-ein-thread-in-python) es wird nicht sterben, wenn es mit Systemaufruf beschäftigt ist (und raw_input() als eins klassifiziert, nicht wahr?) ?) ... :( – Sushi271