Ich habe (für meinen eigenen persönlichen Gebrauch) die Lösungen einiger Leute zu zeitgesteuerten Tastatureingaben ausprobiert und die einzige, die funktioniert hat, war eine von Alex Martelli/Martineau here. Ich benutzte ihren zweiten Block von Code (beginnend mit Import msvcrt) und es funktionierte gut für so gut wie alles, aber Vergleiche. Ich ersetzte die Rückkehr von None mit einem leeren String, wenn keine Eingabe in der Zeit eingegeben und ich verwendet, um einige Testlinien wie unten dargestellt:Warum sind diese Zeichenfolgen nicht gleich?
import msvcrt
import time
def raw_input_with_timeout(prompt, timeout):
print prompt,
finishat = time.time() + timeout
result = []
while True:
if msvcrt.kbhit():
result.append(msvcrt.getche())
if result[-1] == '\r': # or \n, whatever Win returns;-)
return ''.join(result)
time.sleep(0.1) # just to yield to other processes/threads
else:
if time.time() > finishat:
return ""
textVar = raw_input_with_timeout("Enter here: \n", 5)
print str(textVar) # to make sure the string is being stored
print type(str(textVar)) # to make sure it is of type string and can be compared
print str(str(textVar) == "test")
time.sleep(10) # so I can see the output
Nachdem ich kompilieren, dass mit pyinstaller, führen Sie es und geben Sie Test in das Fenster ich habe diese Ausgabe erhalten:
Enter here:
test
test
<type 'str'>
False
ursprünglich dachte ich, der Vergleich falsch zurückkehrt, weil die Funktion Zeichen auf ein Array anhängt und dass etwas gehabt haben damit keinen angemessenen Vergleich mit einer Schnur zu tun, aber nach dem zu tun Wenn ich weiter in die Funktionsweise von Python schaue (nämlich die Antwort von SilentGhost here), habe ich wirklich keine Ahnung, warum der Vergleich Ison wird nicht True zurückgeben. Jede Antwort wird geschätzt. Vielen Dank!
Verwenden Sie 'print repr (textVar)' und ich bin sicher, dass ein Unterschied entstehen wird. 'print str (" irgendeine Zeichenkette mit nicht druckbaren Bytes wie \ x00 ")' ist funktional äquivalent zu 'print 'eine Zeichenkette mit nicht druckbaren Bytes wie \ x00" '; Keines wird dieses Null-Byte sichtbar machen (an den meisten Terminals oder Konsolen). 'repr()' erzeugt eine * Debugging-Repräsentation *, eine, die Python-String-Literal-Syntax verwendet, um einen ASCII-sicheren reproduzierbaren Wert zu erzeugen, indem Escape-Sequenzen für alles verwendet werden, was nicht druckbar ist. –
Ist es nicht überflüssig, den "Eingang" in einen "Str" umzuwandeln? 'input' wird immer als String interpretiert. – Ian
Beachten Sie, dass "print" schon 'str' auf allem, was Sie zu drucken versuchen, aufruft, was all Ihre' str() 'Aufrufe redundant macht, sogar für die Booleschen und' str' Typ Objektresultate. –