2017-12-04 11 views
1

윈도우 7 힘내 배쉬/WinPTY에서 Python3 작업 유니 코드 문자를 화살표, 제한된 사용자 계정이 실행 힘내 git version 2.14.1.windows.1모두 REPL/키 기능과

는 MinGW/MSYS MINGW64_NT-6.1 REDACTED 2.8.2(0.313/5/3) 2017-07-12 15:35 x86_64 Msys

파이썬 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32

를 얻는 방법

로켈이 설정되었습니다.

$ locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_ALL= 

Python IO 인코딩 env variable '테스트'에 대한 지금

$ env | grep "PYTHON" 
PYTHONIOENCODING=utf-8 

을 설정 한 :

$ /c/Python34/python.exe -i 
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'utf-8' 
>>> print('\u2660') 
♠ 
>>> 

유니 코드는 작동하지만 화살표 키 기능은 REPL에서 손실되었습니다. 대신 WinPTY를 사용하여 실행하십시오.

$ winpty /c/Python34/python.exe -i 
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'utf-8' 
>>> print('\u2660') 
ΓÖá 
>>> 

이제 REPL에서 내역을 탐색 할 수 있지만 유니 코드는 불안정합니다.

그래서 겉으로보기에는 REPL 또는 적절한 유니 코드 인코딩에서 화살표 키를 사용할 수 있지만 둘 다 사용할 수는 없습니다. 다른 사람이이 문제를 겪거나이 모든 작업을 수행 할 수있는 무언가를 놓쳤습니까?

참고 :이 환경으로 제한됩니다. 나는 쉽게 앱을 설치/업데이트/수정할 수 없습니다.

+2

'WinPTY'의 경우, 콘솔은 여전히'cp437' (기본 US OEM Windows 인코딩)을 사용하고 있지만 파이썬이'PYTHONIOENCODING'을 통해 UTF-8을 출력하도록했습니다. 파이썬 3.6으로 업데이트 할 수 있습니까? 이 버전은 이제 Windows 유니 코드 콘솔 API를 사용하여 유니 코드를 출력하므로 문제가 없어야합니다. –

+0

그래서 mintty는 bash가 쓸모 없게 상속 한 숨겨진 콘솔을 만들고 표준 핸들은 대신 파이썬이 상속하는 명명 된 파이프로 설정되므로 표준에서는 파이썬의 기본 동작을 피하기 위해'-i'와'PYTHONIOENCODING'을 사용해야합니다. I/O가 파이프됩니다. 그런 다음 파이썬은 더 이상 입력 히스토리와 입력 편집을 위해 콘솔의 조리 된 읽기를 가지고 있지 않습니다. 그래서 우리는 winpty와 winpty-agent를 사용하여 그것을 해결할 것입니다. winpty와 winpty-agent는 파이썬을위한 또 다른 숨겨진 콘솔을 만들고 스크린 버퍼의 모호한 폴링에 의존합니다. 너무 복잡하다. MSYS bash를 일반적인 콘솔 응용 프로그램으로 실행하는 방법을 고수 할 것입니다. – eryksun

+0

@ Mark Tolonen : 감사합니다! 필자는 현재의 환경과 일치하는 다른 비 관련 머신을 테스트 한 다음, 필자의 환경에서 사용할 수 없다고 생각한 Python 3.6.2를 설치했습니다. 그렇습니다. – Xanothos

답변

1

WinPTY의 경우, 콘솔은 여전히 ​​cp437 (기본 US OEM Windows 인코딩)을 사용하지만 파이썬이 PYTHONIOENCODING을 통해 UTF-8을 출력하도록했습니다. 이제 버전이 Windows 유니 코드 콘솔 API를 사용하여 유니 코드를 출력하고 인코딩에 문제가 없어야하므로 Python 3.6으로 전환하십시오.