やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonインタプリタの対話モードを実行してみた

とにかくPythonに触ろうと思い、実行してみた。

開発環境

実行

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キー押下する。

手順

  1. コンソールを起動する
  2. pythonを入力し、Enterキーを押下する
  3. >>>のところでprint("ABC")を入力し、Enterキーを押下する
  4. 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エラーが出なくなった!

f:id:ytyaru:20161202122206p:plain

これをConEmuの起動時に実行するように設定してやればUTF-8環境にできそう。

ConEmuの起動時コマンド設定

コンソール環境を改善する(ConEmu)
コンソール環境を改善する(nyagos)

の過去記事を思い出しつつやってみる。

  1. ConEmuを起動する
  2. タイトルバーを右クリックする
  3. メニューからSettingsを選択する
  4. 左のTreeからStart upを選択する
  5. 左のTreeからStart up/Tasksを選択する
  6. リストからnyagosを選択する
  7. 起動引数にset PYTHONIOENCODING=utf-8を追加する

f:id:ytyaru:20161202124246p:plain

複数コマンドを渡す

最後のところがちょっと悩んだ。もともと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を起動して、以下のようにコマンドを叩く。

f:id:ytyaru:20161202122914p:plain

  • chcpで65001になっていることを確認した
  • pythonインタプリタの対話モードでprint "a"を実行してもLookupError: unknown encoding: cp65001エラーが表示されないことを確認した

Google API Client Libraryをインストールしたときも同様のエラーが出ていた。今一度やってみる。

pip install --upgrade google-api-python-client

f:id:ytyaru:20161202122319p:plain

エラーが出なかった。これにて解決!

追記: 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"

f:id:ytyaru:20170208102721p:plain
f:id:ytyaru:20170208101350p:plain

起動した。そしてActive code page: 65001も表示された。スッキリ解決!

蛇足

ついでにPythonでの表示確認もしてみた。

f:id:ytyaru:20170208102919p:plain

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というガラパゴス空間のせいで余計な苦労を強いられた。空気の入れ替えもスムーズにできない窓なんて壁以下。