6

tempfile.NamedTemporaryFile()プログラムが終了するまでテキストを保存するために使用しています。Unixでは問題なく動作していますが、Windowsでは、返されたファイルに読み取りまたは書き込みでアクセスできません。pythonはErrno 13を提供します。唯一の方法はdelete=False、ファイルを設定して手動で削除することですos.remove()。なんで?

4

3 に答える 3

5

ファイルは作成後に一度しか開くことができないため、これにより IOError が発生します。

その理由は、Windows ではフラグNamedTemporaryFile付きのファイルを作成するためです。FILE_SHARE_DELETEWindows では、特定の共有フラグを使用してファイルが作成/開かれた場合、後続のすべての開く操作でこの共有フラグを渡す必要があります。フラグを渡さないPython のopen関数には当てはまりません。サブプロセスで読み取ることができる一時ファイルを作成する方法FILE_SHARE_DELETEに関する私の回答を参照してください。詳細と回避策について質問してください。

于 2013-03-23T18:03:56.227 に答える
1

見てみましょう: http://docs.python.org/2/library/tempfile.html

 tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

この関数は、TemporaryFile() とまったく同じように動作しますが、ファイル システムでファイル名が表示されることが保証されている点が異なります (Unix では、ディレクトリ エントリはリンク解除されません)。その名前は、ファイル オブジェクトの name 属性から取得できます。名前を付けた一時ファイルがまだ開いている間に、その名前を使用してファイルをもう一度開くことができるかどうかは、プラットフォームによって異なります (Unix では使用できますが、Windows NT 以降では使用できません)。delete が true (デフォルト) の場合、ファイルは閉じられるとすぐに削除されます。

于 2013-03-23T15:11:05.490 に答える