どうも、こんにちは。
seleniumを使ったスクレイピングのコードをPythonで書いて手動で動かすと動いたのでCentOSのcronに載せて動かしてみようと思ったのですが、うんともすんとも言わず動きません。
あれこれ調べたのですが、エラーを見ると文字コードについて何か書いてあります
type:<class ‘UnicodeEncodeError’
どうもPythonでは、ASCIIという文字コードを標準で使っているが、日本語はASCIIではないためエラーが発生するようです。
そのため文字コードをしっかりutf-8に指定してあげると無事動きました。
下記のコードを追加するだけです。
import io,sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
これで一応解決はしたのですが、手動では動いてcronでは動かないという理由がまだ分かりません。
これは、cronの場合は環境変数が最低限のものしか登録されていないため、文字コードについてしっかりと指定してあげる必要があるからというのが一応の答えになりそうです。
それで調べてみました。
やはりcronの環境変数では文字コード環境変数LANGなどは設定されておらず、先に挙げた標準の文字コードしか使えないため、それ以外の日本語のような文字コードを出力しようとすると文字コードでエラーになるようです。
また一つ勉強になりました。
コメント