Python input()不检测MINGW终端中的EOL(但在CMD终端中检测到)

时间:2016-12-14 14:13:10

标签: python mingw eol

我在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)。

1 个答案:

答案 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()