我在Windows 10中的python 3.5.2中运行以下程序:
username = input('uname:')
如果我在MINGW终端中运行,input()
函数会提示提示,但在键入一些文本后跟<RETURN>
键时无法返回。
在命令(cmd.exe)终端中运行相同的程序,input()
将返回一个按预期的字符串。
我怀疑这与Windows与MinGW中的不同EOL表示有关。我通过输入^M <RETURN>
无效而试图欺骗Windows EOL。
理想情况下,我想解决这个问题&#39; in-script&#39;并使其对用户透明,但如果没有我想要一些解决方案,即使用户必须键入一些魔术键组合。
BTW,如果我在Visual Studio Code python调试器中运行脚本,就会出现同样的问题(没有检测到EOL)。
答案 0 :(得分:2)
我最近有类似的问题。
经过一些环顾四周,我最后放弃了input
并继续这样做,检查终点字符的条例(基于this答案):
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()