読者です 読者をやめる 読者になる 読者になる

dothikoのカクカクワールド2D REBOOT

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか色々。

pythonでos.tempnam()のRuntimeWarningを抑制する

追記ありっていうか、tempfileモジュールなんてのがいつの間にかありました(汗

以下、消してもいいんですが整合性の為に残しておきます。

いや、本来はやっちゃいけないことだとは思うのですが、とりあえず。

自作のpythonをつかったmp3タグ変換スクリプトで、ふと思いたち「拡張子が.wavなら自動でmp3変換してそれにタグを付ければ全自動でよくね?」と考えました。subprocessでlameでも呼べば簡単です。

さらに湧き出るアイデア

そうだ、それもSSDの寿命を削らないためにHDD上の/tmpで処理すればさらに美しいぞ!

どんだけドケチなのか自分でも恐ろしいですが、pythonではいつごろからかsymlink攻撃防止のためにos.tempnam()とかは使うだけでRuntimeWarningを吐くようになっています。

これを抑制するにはどうするか。ググって出てきたのはshebang

#!/usr/bin/env python -W ignore::RuntimeWarning

とかなんとかするっぽい話なのですが、何故かうちでは動作せず… 諦めずに探っていたら、このようなものを発見しました。

supressing warning message? - Python

import warnings;warnings.filterwarnings('ignore')

と書けばいいわけです。

でもこれだと他の警告もでなくなるような気が…

まぁ、覚悟の上の処理という事ならば、むしろ警告を抑えるのではなく、自前でtime.localtime()で時間を得て、それで適当にハッシュ化するなりそのまま使うなりしてテンポラリファイル名を得ればいいような気がしますが…とりあえず、何か警告が消したくなる事態を考えて備忘録的に書いておきます。

追記

今はtempfileモジュールがあって、それで「可能な限りセキュアな」テンポラリファイル名やテンポラリディレクトリを得られるそうです。

参考リンク↓

10.6. tempfile — 一時的なファイルやディレクトリの生成 — Python 2.7ja1 documentation

まぁこの記事の主目的は警告抑制の方法をメモっておくことですから、ちょっと違うかもですが‥とにかくこんな便利なモジュールがあるとは知らず、無知とは恐ろしい(汗