2017-12-04 17 views
1

のWindows 7のGit Bashの/ WinPTY下のpython3で作業をUnicode文字を矢印、制限付きユーザーアカウントが実行されている Gitの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の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 | 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') 
♠ 
>>> 

Unicodeは動作しますが、矢印キーの機能は、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エンコーディング)を使用していますが、Pythonは 'PYTHONIOENCODING'を介してUTF-8を出力するように強制しています。 Python 3.6にアップデートできますか?このバージョンでは、Windows UnicodeコンソールAPIを使用してUnicodeを出力するため、問題は発生しません。 –

+0

minttyは、bashが無用に継承している隠しコンソールを作成し、代わりに標準ハンドルを名前付きパイプに設定します。これはPythonが継承するので、標準でPythonのデフォルト動作を回避するために '-i'と' PYTHONIOENCODING' I/Oはパイプ接続されています。もちろん、Pythonは入力履歴と入力編集のためのコンソールの調理読み込みをもはや持っていません。ですから、winptyとwinpty-agentを使って解決します。これはPython用の別の隠しコンソールを作成し、スクリーンバッファの疑わしいポーリングに依存します。あまりにも複雑です。私は通常のコンソールアプリケーションとしてMSYS bashを実行することに固執します。 – eryksun

+0

@マークトローネン:ありがとう!私は、私の現在の環境に最初にマッチした別の無関係のマシンでテストを行い、自分の環境で利用可能だったPython 3.6.2をインストールしました。 – Xanothos

答えて

1

WinPTYの場合、コンソールは引き続きcp437(デフォルトの米国OEM Windowsエンコーディング)を使用していますが、PythonはPYTHONIOENCODINGでUTF-8を出力するように強制しています。そのバージョンではWindows UnicodeコンソールAPIを使用してUnicodeを出力し、エンコードに問題はないはずなので、Python 3.6に切り替えます。

関連する問題