とにかくPythonに触ろうと思い、実行してみた。
開発環境
- Windows XP Pro SP3 32bit
- cmd.exe(ConEmu/Nyagos)
- Python 2.7.10
- Python 3.4.4
実行
Pythonはインタプリタの対話モードによって、コードを実行できるらしい。
> python Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print("ABC") ABC
終了するときは、Ctrl+Zを入力し、Enterキー押下する。
手順
- コンソールを起動する
python
を入力し、Enterキーを押下する>>>
のところでprint("ABC")
を入力し、Enterキーを押下するABC
が表示される
文字コード問題
コンソールがUTF-8だとエラーになった。
Windows XPで、ConEmu/Nyagosを使い、chcp 65001
(UTF-8)設定にしているとLookupError: unknown encoding: cp65001
と怒られ実行できなかった。
chcp 932
コマンドを実行して、UTF-8からCP932(Shift-JIS)にすると回避できた。が、UTF-8のままで使いたい。
WindowsのCP932問題
こちらから抜粋。
推奨される文字コードは utf-8 です。ただし、 utf-8 でソースを書いた場合、 utf-8 を表示できない Windows のコマンドプロンプトは print “こんにちは” を実行すると文字化けを起こすでしょう。
Windowsはこれだから嫌いよ!
その場合は、互換性のために古い cp932 エンコーディングを使うか、 print u"こんにちは" のように Unicode 文字列を使います。
ということらしい。何か話が少し違う気がする。
コンソールでchcp 65001
をするとLookupError: unknown encoding: cp65001
エラーになるのが問題。これを解決したいだけ。
LookupError: unknown encoding: cp65001
set PYTHONIOENCODING=utf-8
上記コードをコンソールで叩いてからPythonを実行すると、LookupError: unknown encoding: cp65001
エラーが出なくなった!
これをConEmuの起動時に実行するように設定してやればUTF-8環境にできそう。
ConEmuの起動時コマンド設定
コンソール環境を改善する(ConEmu)
コンソール環境を改善する(nyagos)
の過去記事を思い出しつつやってみる。
- ConEmuを起動する
- タイトルバーを右クリックする
- メニューから
Settings
を選択する - 左のTreeから
Start up
を選択する - 左のTreeから
Start up
/Tasks
を選択する - リストから
nyagos
を選択する - 起動引数に
set PYTHONIOENCODING=utf-8
を追加する
複数コマンドを渡す
最後のところがちょっと悩んだ。もともとchcp 65001
コマンドを渡していたが、追加でset PYTHONIOENCODING=utf-8
コマンドも渡したい。どうすればいいのか。
NG。
C:\root\tool\Terminal\nyagos-4.1.6_1-386\nyagos.exe -k "chcp 65001" & "set PYTHONIOENCODING=utf-8"
NG。
C:\root\tool\Terminal\nyagos-4.1.6_1-386\nyagos.exe -k "chcp 65001" & set PYTHONIOENCODING=utf-8
OK。
C:\root\tool\Terminal\nyagos-4.1.6_1-386\nyagos.exe -k "chcp 65001 | set PYTHONIOENCODING=utf-8"
複数のコマンドを実行するときのパラメータ指定方法がわからなかった。結局、パイプでごまかした。
すると、いつも起動時に先頭に表示されていたActive code page: 65001
が表示されなくなった。べつにいいや。
解決したか確認する
ConEmuを起動して、以下のようにコマンドを叩く。
chcp
で65001になっていることを確認した- pythonインタプリタの対話モードで
print "a"
を実行してもLookupError: unknown encoding: cp65001
エラーが表示されないことを確認した
Google API Client Libraryをインストールしたときも同様のエラーが出ていた。今一度やってみる。
pip install --upgrade google-api-python-client
エラーが出なかった。これにて解決!
追記: 2/8
「複数のコマンドを実行するときのパラメータ指定方法」をコメントにて教えていただきました。おかげさまで解決しました。ありがとうございます。
nyagos.exe -k “chcp 65001 ; set PYTHONIOENCODING=utf-8 と「1個の空白+セミコロン」で区切れば Ok です。
とのことなので、早速やってみた。
C:\root\tool\Terminal\nyagos-4.1.6_1-386\nyagos.exe -k "chcp 65001 ; set PYTHONIOENCODING=utf-8"
起動した。そしてActive code page: 65001
も表示された。スッキリ解決!
蛇足
ついでにPythonでの表示確認もしてみた。
LookupError: unknown encoding: cp65001
エラーは表示されないが、日本語が表示されない。空行が表示された直後に強制終了する。
インタプリタをやめてファイル実行にすれば表示できた。以下のファイルtest.py
を作成し、C:/Python34/python test.py
などしてPython3で実行すると表示される。
#encoding:utf-8 print('日本語')
インタプリタでUTF-8(日本語)を表示する方法が不明。しかし、表題の件と関係ないためここでやめる。 ただUTF-8文字を表示するだけだが、思いのほか難しそう。Pythonの仕様や2と3の違い、Nyagos、Windowsの文字コード問題など、調べるのも大変そう。
所感
UTF-8コンソール環境でPythonが叩けるようになった。
って、Pythonを実行したかっただけのはず。いつのまにか記事の内容が文字コード問題に毒されている。Windowsというガラパゴス空間のせいで余計な苦労を強いられた。空気の入れ替えもスムーズにできない窓なんて壁以下。