Drkcore

19 12 2006 perl Tweet

File::TempとFile::chdirでレガシーツールをやっつける

コンピュテーショナルケミストリー関連の昔のツールとかは

  • インプットがファイル渡し
  • アウトプットもファイルに吐く
  • 中間ファイルもバコバコ吐く
  • (しかもカレントディレクトリに)

とかいうのが多くて、ラッパー書くときにテンポラリ作ったり消したりしないといけなかったりして結構面倒だ。

で、File::TempとFile::chdirの組み合わせでかなり楽ができそうな感じ。

use File::chdir;

$dir = tempdir( CLEANUP => 1 );
($fh, $filename) = tempfile( DIR => $dir );
print $fh $input_data;

{
    local $CWD = $dir;
    my $str = system("exec_legacy_tool_with_file -i $filename");
    die $str if $str;
}

これで、実行後のテンポラリのファイルとかディレクトリは自動的に消されるし、作業ディレクトリを変更してあれこれやったこともローカル化されているので、スコープ抜けるときに綺麗になるので安心。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021