2017-09-01 12 views
0

Python 2では、一時ファイルを作成してアクセスするのは簡単でした。しかし、Python 3では、もはやそうではないようです。私はtempfile.NamedTemporaryFile()で作成するファイルにどのようにアクセスできるのか混乱しているので、その上でコマンドを呼び出すことができます。例えばPython NamedTemporaryFileは、データの書き込み後も空に見えます。

temp = tempfile.NamedTemporaryFile() 
temp.write(someData) 
subprocess.call(['cat', temp.name]) # Doesn't print anything out as if file was empty (would work in python 2) 
subprocess.call(['cat', "%s%s" % (tempfile.gettempdir(), temp.name])) # Doesn't print anything out as if file was empty 
temp.close() 
+0

Works for me? 'temp.name'は私に正しいファイル名を与えます(' '/ var/folders/ck/s38sycld0tvgb5qhmqtf750r0000gn/T/tmp7ejqww3s' ') – L3viathan

+0

「*動作しません」とはどういう意味ですか?それは十分な問題の仕様ではありません。そして、それがそのままで、それは私のためにうまく動作します... –

+4

わかりました、私は推測があります: 'temp.flush()'を呼び出すの後に呼び出します。あなたが書いているデータはバッファリングされています。 – L3viathan

答えて

1

問題は、フラッシングです。ファイルの出力は効率の理由からバッファされるため、実際にファイルに変更が書き込まれるようにするには、を指定する必要があります。また、コンテキストマネージャーwithを使用してください。instad:

with tempfile.NamedTemporaryFile() as temp: 
    temp.write(someData) 
    temp.flush() 
    subprocess.call(['cat', temp.name]) 
関連する問題