python docs for tempfile.NamedTemporaryFile
は言う:Windows上でサブプロセスにNamedTemporaryFileを渡す
という名前の一時ファイルがまだ開いている間名前は、ファイルをもう一度開くために使用することができるかどうかは、プラットフォーム間で異なります(それができますUNIX上で使用されています; Windows NT以降では使用できません)。
私に触れることができないprog input.txt
と呼ばれるプログラムがあります。私はこの文字列を与えるためにPython関数を記述したいと思います。
ここではかなり動作しない様々なアプローチです:窓
with NamedTemporaryFile() as f:
f.write(contents)
subprocess.check_call(['prog', f.name]) # legal on windows?
に法的には早すぎる
with NamedTemporaryFile() as f:
f.write(contents)
f.close() # does this delete the file?
subprocess.check_call(['prog', f.name])
をファイルを削除する可能性がある場合 from tempfile import NamedTemporaryFile
ない明らかに
は適切に補正されているこれらの
with NamedTemporaryFile(delete=False) as f: f.write(contents) # if this fails, we never clean up! try: subprocess.check_call(['prog', f.name]) finally: os.unlink(f.name)
少し醜い
f = NamedTemporaryFile(delete=False) try: with f: f.write(contents) subprocess.check_call(['prog', f.name]) finally: os.unlink(f.name)
をクリーンアップしませんか?
これはまだ私のために動作しません私は読みやすさと再利用性を向上させるための機能でそれを包むことをお勧めします。 'f'にアクセスしようとしているサブプロセスは、ファイルが 'check_call'環境の中に存在しないことを報告します。 – jcoppens