2009-06-26 9 views
2

一時ファイルライブラリNamedTemporaryFileメソッドを使用して、一時名前付きファイルを作成しました。私はこれらの生成されたファイルを使用して、いくつかのシェルコマンドを呼び出すためにsubprocessモジュールを使用しようとしていますサブプロセスモジュール:tempfileオブジェクトでの呼び出しメソッドの使用

私は彼らに書かれている はバッファをフラッシュし、私はそれらを閉じていない(または他の彼らは離れて行くかもしれません)。

subprocess.call('cat %s' % f.name)は、指定されたテンポラリファイルが存在しないと言っても常に失敗します。

os.path.exists(f.name)は常にtrueを返します。 catコマンドをシェルから直接実行することができます。

subprocessモジュールが一時ファイルで動作しない何らかの理由はありますか?

動作させる方法はありますか?

ありがとうございます。

+0

私はshell = Trueを使用していないので、私はそれに変更しました。これでエラーが発生し、 '/ bin/sh:そのようなファイルやディレクトリはありません' – Matt

+0

ファイルも削除されません。私は私の端末の中に別のタブを開いて、ちょうど良いファイルをcatできます。私が言ったように、os.path.existsはまだファイルがそこにあると言います。それはサブプロセスモジュールのものです。 – Matt

答えて

1

サブプロセスにshell = Trueオプションを使用していますか?

+0

私は愚かで、シェルをtrueに設定してエラーを修正しましたが、実際にファイルが存在しなかった別のファイルが見つかりませんでした。 – Matt

3

NamedTemporaryFileをオプションのパラメータdelete=Falseで作成してみませんか?そうすれば、消滅しないことを知っている人を安全に閉じて、その後正常に使用し、完了したら明示的にリンクを解除することができます。このようにして、すべてがクロスプラットフォームでも動作します。

関連する問題