世の中、Python2が健在で、まだまだ現役です。
と言うことでサーバ側の実装も、Python2とPython3の両方を作りました。
で…、 けっこう面倒くさいです。
サーバはWindowsとLinuxの両方を想定しているので結局
(WindowsとLinux)×(Python2とPython3) の4種類を作る羽目になりました。
以下、僕が今回出くわした、Python2とPython3の違いを紹介します。
物はCGIスクリプトです、OSはubuntuです。
---------------------------------------
まず、インタプリッタの場所が違う。
Python2だと
#!/usr/bin/python
Python3だと
#!/usr/bin/python3
これはまー、仕方ないかな(- -)
---------------------------------------
printが違います。
Python2だと
print txt
Python3だと
print(txt)
これはpython3が出たときに最初から言われていたことなので仕方ないかな(- -)
---------------------------------------
Python3では問題なく動くのですが、Python2ではエラーが出ました。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5601-5602: ordinal not in range(128)\r
これはアスキーコードでは無いと言っているようです。
頭で以下の様に宣言はしているのですが 、UTF-8として扱ってくれません。
# -*- coding: utf-8 -*-
しかたがないので。
Python2だと
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
print (txt)
Python3だと
print (txt)
---------------------------------------
今度はと動かすと、 バイトデータで日本語が文字化けします。
しかたがないので、明示的にUTF-8だと指定しました。
下記の例では、inMsgがバイト配列です。
Python2だと
sql = sql+",'"+inFile.decode('utf-8')+"'"
Python3だと
sql = sql+",'"+inFile+"'"
---------------------------------------
CGIのデバック用サーバが違う。
pythonにはデバック用の簡易CGIサーバが標準で付いています。
Python2だと
コマンドラインで、実行します。
python -m CGIHTTPServer
Python3だと
以下の2行だけのプログラムを作り実行します。
import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
いずれもカレントのディレクトリ配下にディレクトリcgi-binを置くとその中のCGIスクリプトが実行されます。
--------------------------------------
なんとか、やっとこさ、動く様になりました。 よくPython3でなくてもPython2で十分と言う話をWeb上で見かけます。
欧米人に多い気がします。
私見ですがそれは、ASCIIコードで事足りる人々の話だと思います。
亜細亜に住む人々はPython3 をつかうべきです
Androidのアプリ「酔いから醒めるまで」をフリーで出していました。
久々に、これを忘年会シーズンに向けてメンテナンスしようと思いeclispを立ち上げると、なぜかコンパイルエラーが出ます。いままで、せいぜいAndroidSDKManagerで更新したぐらいなのですが。
まるで、 真夜中に森の中で100m走をやっているみたいです、スタートしてはゴチン、ダッシュしてはゴチン。
0 件のコメント:
コメントを投稿