Python input() не обнаруживает EOL в терминале MINGW (но обнаруживает в терминале CMD)
Я запускаю следующую программу на Python 3.5.2 в Windows 10:
username = input('uname:')
Если я бегу в терминале MINGW, input()
Функция предлагает подсказку, но не может вернуться после ввода текста <RETURN>
ключ.
Запуск той же программы в командном (cmd.exe) терминале, input()
возвращается со строкой, как и ожидалось.
Я подозреваю, что это связано с различными представлениями EOL в Windows против MinGW. Я попытался подделать Windows EOL, набрав ^M <RETURN>
но безрезультатно.
В идеале я хотел бы решить эту проблему "в сценарии" и сделать ее прозрачной для пользователя, но в случае неудачи я бы хотел найти какое-то решение, даже если в этом случае пользователь должен ввести какую-то волшебную комбинацию клавиш.
Кстати, та же проблема (не обнаружение EOL) возникает, если я запускаю скрипт в отладчике Python кода Visual Studio.
1 ответ
У меня недавно была похожая проблема.
Посмотрев вокруг, я бросил input
и происходит что-то вроде этого, который проверяет таинства конечных символов (на основе этого ответа):
import sys
import os
try:
# Win32
from msvcrt import getch
except ImportError:
# UNIX
import tty
import termios
def getch():
# print('READING!')
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
sys.stdout.write(ch)
sys.stdout.flush()
return ch
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
input = []
while True:
char = getch()
input.append(char)
# crtl + c
if ord(char) == 3:
print('input: {}'.format(''.join(input)))
sys.exit()
# \n
elif ord(char) == 10:
print('input: {}'.format(''.join(input)))
sys.exit()
# \r
elif ord(char) == 13:
print('input: {}'.format(''.join(input)))
sys.exit()
elif ord(char) == ord(os.linesep):
print('input: {}'.format(''.join(input)))
sys.exit()