Я пытаюсь (для моего личного использования) решения некоторых людей для временных клавиатурных входов и только один, который работал, был одним из Alex Martelli/martineau. here. Я использовал их второй блок кода (начиная с import msvcrt) и он отлично справлялся со всем, кроме сравнения. Я заменил возвращение None с пустой строкой, если входной сигнал не вводится во времени, и я использовал несколько тестовых линий, как показано ниже:Почему эти строки не равны?
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
После того как я скомпилировать, что с pyinstaller, запустить его, и испытания типа в окно , я получаю этот выход:
Enter here:
test
test
<type 'str'>
False
первоначально я думал, что сравнение возвращается значение False, так как функция добавляет символы в массив, и что, возможно, что-то делать с этим не делать надлежащее сравнение со строкой, но после того, как глядя дальше на то, как работает Python (а именно, ответ SilentGhost here), я действительно не знаю, почему сравнение ison не вернет True. Любой ответ оценивается. Спасибо!
использовать 'print repr (textVar)' и я уверен, что разница будет возникать. 'print str (« некоторая строка с непечатаемыми байтами типа \ x00 »)' функционально эквивалентна 'print 'некоторой строке с непечатаемыми байтами типа \ x00" '; ни один из них не сделает видимым нулевой байт (на большинстве терминалов или консолей). 'repr()' создает * отладочное представление *, которое использует синтаксис строкового литерала Python для создания ASCII-безопасного воспроизводимого значения с использованием escape-последовательностей для чего-либо, что невозможно для печати. –
Не избыточно ли конвертировать 'input' в' str'? 'input' всегда интерпретируется как строка. – Ian
Обратите внимание, что 'print' уже вызывает' str' на все, что вы пытаетесь распечатать, что делает все ваши вызовы 'str()' избыточными, даже для результатов типа boolean и 'str'. –