Home > Python > Pythonでバッチ書いてcronで実行させると死ぬ

Pythonでバッチ書いてcronで実行させると死ぬ

今回の解決方法はこちら。
export PYTHONIOENCODING=UTF-8
bash_profileかなんかに書いとく
おわり。
以下おまけ。

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 38-41: ordinal not in range(128)

こんなこといわれる。Python書いてるとどっかで必ずぶつかって唸るやつ。
内部エンコードが云々とかはやっとこ理解してきて、中ではunicode、外に出すとき初めてencodeして、とかいうあたりは馴染んできた。
今日悩んでいたのは、自分で叩くと問題なく実行できる、文字列の出力を伴うプログラム。
実行状況をコンソールで見たかったので、あちこちにprintがどかどか入っているもの。
なんとなくうまくいくようなので、じゃあcrontab(これがまあ前時代的とかはあるんだけどrundeckだろうと根っこは同じだ)にセットすると、これがうまくいかない。
文字列を出力するところでいつものやつがでていて死んでる。
どういうこっちゃ。あたしゃ毎日0:30にリモートログインして手で叩かないといけないのか。

結局どうも、シェルに諸々やらせるときには、エンコーディングについていい具合によろしくしてくれないので、わからんのでasciiでいいやと判断され、死ぬということがわかりました。
症状見ればそこまでは分かるんだけど、export LANG=ja_JP.UTF-8云々を書いてもうまくいかないし、なんなのと泣いていたところ、そういえばPYTHONIOENCODINGってあったよね何なのかよく知らんけどという着地をした次第。
新しくこさえたEC2に移行作業してるんですが、そういうまっさらのとこだと、設定の漏れがポコポコ出てくるんですね。
ansibleに追記して保存、一件落着。

参考りんく

Python 3の各種エンコーディングについて – Qiita http://qiita.com/methane/items/6e294ef5a1fad4afa843

Python2で文字列を処理する際の心掛け – Qiita http://qiita.com/FGtatsuro/items/cf178bc44ce7b068d233

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

TOP