2009-06-26 56 views
2

我已經創建了臨時命名文件,並帶有tempfile庫的NamedTemporaryFile方法。 我已經寫信給他們刷新緩衝區,並且我還沒有關閉它們(否則它們可能會消失)子進程模塊:使用tempfile對象的調用方法

我試圖使用subprocess模塊使用這些生成的文件調用某些shell命令。

subprocess.call('cat %s' % f.name)總是失敗,說明指定的臨時文件不存在。

os.path.exists(f.name)始終返回true。 我可以從shell直接在文件上運行cat命令。

是否有某些原因subprocess模塊不能用於臨時文件?

有什麼辦法可以使它工作嗎?

在此先感謝。

+0

我沒有使用shell = True,所以我改變了它。現在錯誤出現,說:'/ bin/sh:沒有這樣的文件或目錄' – Matt 2009-06-26 15:19:48

+0

這些文件也沒有被刪除。我可以在我的終端中打開另一個選項卡並捕獲這些文件。就像我說的,os.path.exists仍然說文件在那裏。它是與子進程模塊的東西。 – Matt 2009-06-26 15:21:03

回答

1

您是否使用shell = True選項進行子流程?

3

爲什麼不讓NamedTemporaryFile與可選參數delete=False?這樣,您可以安全地關閉它們,因爲知道它們不會消失,之後通常會使用它們,並在完成後明確地解除它們。這樣一切都將跨平臺工作。