Python3系にしてやられる…
3月に「アニメ最速放送日抽出スクリプト」を作成した時は気づかなかったのですが、昨年の11月にPythonの動作を全てPython3系に環境を移行した際に、バックグランド(cron)で動いてたスクリプトがエラーになっている事に気が付かず、このブログ(FC2)とは別に利用している無料サーバに対して実行している処理が行われず、とある禁止事項に抵触し、定期的にアカウントが凍結の警告が行われている状況になっていました。
このバックグランド処理は工数かけずに一瞬で作ってしまっていたもので、これを作成していた事を完全に失念しており、「なんか作ったような気がしたけど、作ってなかったのかなぁ~ でも、これまで何年も垢バンされてなかったから、何かしらが動いていた気がしたんだけど…」と、繰り返し警告がくるもの嫌なので、そろそろ対処するか…と、仕方なく別に作った後になって、過去のスクリプトが見つかり、「なんだ、やっぱり作ってあったんじゃん!(# ゚Д゚)」と自分に怒りを覚えるハメに。(^^;
(最初にcrontabでバックグランドの登録情報を確認さえしてれば…ボケててソレに気づくのが遅れたのが敗因)
今回間違って作ってしまったスクリプトはシェルスクリプトだったのですが、過去のものはPython2系のものでした。
どーせ作ってあるのなら、Python3系でメンテナンスするかな…と、今回作成したシェルスクリプトはお蔵入りをして、修正を行った際に2箇所問題が見つかったので、今後何かあったら検索できるように自分の備忘録として書いておこうかと思います。
【(今更)Python2系からPython3系に陥った罠】
(1) 「import commnadsの」廃止。セキュリティ上の問題があり、Python3では
削除されていた。
(2) ftplib(FTPプロトコルクライアント)モジュールのstorbinaryメソッドの挙動が
変わっていた。
これはキチンと調査していないので(する気がない)憶測でものを語っていますが、
どうやらアスキーモードとバイナリーモードがファイルのオープン属性をキチンと
精査している…ようで、メソッド名のとおり、バイナリファイルをオープンして
渡さないと例外を吐いてしまう…というようです。
ファイルのオープンをopen('ファイル名', 'rb')といった形で実行しないとNGでした。
(以前はOKだった)
内部処理を見た限りでは配列処理にするためにコケたように見えましたが、
ちゃんと解読していないので、よくわかりません。
この(2)は結構レアケースなのか、または私の検索が下手なのか、ネットでなかなか同じ現象で困った人に遭遇しませんでした。
(1人の外人さんがStack Overflowのサイトで吠えていただけでした)
「PythonでFTPなんかしねーよ」って事なのかもしれないですが…
(今回忘れてて作成したものもシェルスクリプトもだった位だし)
まぁ、このような失敗は自己啓発に繋がっているところがあるので、こうやって技術力が上がるってことで、良い勉強になりました。
はぁ、こんなので数時間溶けてしまった… 陽が出てくる前に寝ないと。
このバックグランド処理は工数かけずに一瞬で作ってしまっていたもので、これを作成していた事を完全に失念しており、「なんか作ったような気がしたけど、作ってなかったのかなぁ~ でも、これまで何年も垢バンされてなかったから、何かしらが動いていた気がしたんだけど…」と、繰り返し警告がくるもの嫌なので、そろそろ対処するか…と、仕方なく別に作った後になって、過去のスクリプトが見つかり、「なんだ、やっぱり作ってあったんじゃん!(# ゚Д゚)」と自分に怒りを覚えるハメに。(^^;
(最初にcrontabでバックグランドの登録情報を確認さえしてれば…ボケててソレに気づくのが遅れたのが敗因)
今回間違って作ってしまったスクリプトはシェルスクリプトだったのですが、過去のものはPython2系のものでした。
どーせ作ってあるのなら、Python3系でメンテナンスするかな…と、今回作成したシェルスクリプトはお蔵入りをして、修正を行った際に2箇所問題が見つかったので、今後何かあったら検索できるように自分の備忘録として書いておこうかと思います。
【(今更)Python2系からPython3系に陥った罠】
(1) 「import commnadsの」廃止。セキュリティ上の問題があり、Python3では
削除されていた。
(2) ftplib(FTPプロトコルクライアント)モジュールのstorbinaryメソッドの挙動が
変わっていた。
これはキチンと調査していないので(する気がない)憶測でものを語っていますが、
どうやらアスキーモードとバイナリーモードがファイルのオープン属性をキチンと
精査している…ようで、メソッド名のとおり、バイナリファイルをオープンして
渡さないと例外を吐いてしまう…というようです。
ファイルのオープンをopen('ファイル名', 'rb')といった形で実行しないとNGでした。
(以前はOKだった)
内部処理を見た限りでは配列処理にするためにコケたように見えましたが、
ちゃんと解読していないので、よくわかりません。
File "/usr/lib/python3.6/ftplib.py", line 509, in storbinary conn.sendall(buf) |
この(2)は結構レアケースなのか、または私の検索が下手なのか、ネットでなかなか同じ現象で困った人に遭遇しませんでした。
(1人の外人さんがStack Overflowのサイトで吠えていただけでした)
「PythonでFTPなんかしねーよ」って事なのかもしれないですが…
(今回忘れてて作成したものもシェルスクリプトもだった位だし)
まぁ、このような失敗は自己啓発に繋がっているところがあるので、こうやって技術力が上がるってことで、良い勉強になりました。
はぁ、こんなので数時間溶けてしまった… 陽が出てくる前に寝ないと。
コメント
コメントの投稿
« 昔のゲームの想い出 [0241] 「レイダース5」 [UPL] [1985] [アーケード] l Home l 未来少年コナン デジタルリマスター版 »