2016-12-14 6 views
1

は、私は、Windows 10でのpython 3.5.2で以下のプログラムを実行しているしません:私はMINGWで実行する場合Pythonの入力は、()MINGW端末にEOLを検出する(ただし、CMD端子でない)

username = input('uname:') 

input()関数はプロンプトを表示しますが、テキストの後に<RETURN>キーを入力すると戻りません。

コマンド(cmd.exe)ターミナルで同じプログラムを実行すると、input()は期待どおりの文字列を返します。

これは、WindowsとMinGWのさまざまなEOL表現に関係すると思われます。私は窓口のEOLを偽装しようとしましたが、^M <RETURN>と入力してください。

理想的には、この問題を「スクリプト内」で解決してユーザーに透過的にしたいと思いますが、ユーザーがいくつかの魔法のキーコンボを入力しなければならない場合でも解決策を望みません。

私は、Visual StudioコードのPythonデバッガでスクリプトを実行すると、同じ問題(EOLを検出しない)が発生します。

答えて

2

私は最近同様の問題がありました。

はいくつかの周りを探した後、私は(this回答に基づいて)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() 
関連する問題