2016-12-14 10 views
1

나는 윈도우 10에서 파이썬 3.5.2에서 다음 프로그램을 실행 해요하지 않습니다 내가는 MinGW에서 실행하는 경우파이썬 입력()는 MinGW 터미널에서 EOL 감지 (그러나 CMD 터미널에서 수행)

username = input('uname:') 

터미널에서 input() 함수는 프롬프트를 제공하지만 어떤 텍스트를 입력 한 후 <RETURN> 키를 입력하면 리턴하지 못합니다.

명령 (cmd.exe) 터미널에서 동일한 프로그램을 실행하면 input()은 예상대로 문자열을 반환합니다.

이것은 Windows와 MinGW에서 서로 다른 EOL 표현과 관련이 있다고 생각합니다. 나는 아무 쓸모가없는 ^M <RETURN>를 타자를 쳐서 창 EOL를 스푸핑하는 것을 시도했다.

이상적으로 나는이 문제를 'in-script'로 풀어서 사용자에게 투명하게하고 싶습니다.하지만, 사용자가 몇 가지 마법 키 조합을 입력해야한다고하더라도 해결책이 필요하지는 않습니다.

BTW, Visual Studio 코드 파이썬 디버거에서 스크립트를 실행하면 BTW에서 EOL을 감지하지 못하는 것과 같은 문제가 발생합니다.

답변

2

최근에 비슷한 문제가있었습니다.

는 일부 둘러보고 후, 나는 (this 답변에 따라) input 죽겠다 및 endline의 문자의 조례를 검사 같은 것을, 함께가는 결국 :

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