我正在使用tempfile.NamedTemporaryFile()
来存储一些文本,直到程序结束。在Unix上没有任何问题,但在Windows上,返回的文件无法读取或写入:python提供Errno 13.唯一的方法是设置delete=False
并手动删除文件os.remove()
。为什么?无法访问使用tempfile创建的临时文件
2
A
回答
2
这会导致IOError,因为文件只能在创建后打开一次。
原因是因为NamedTemporaryFile
在Windows上创建了带有FILE_SHARE_DELETE
标志的文件。在Windows上,创建/打开特定共享标志文件后,所有后续打开的操作必须通过此共享标志。 Python的open
函数并不通过FILE_SHARE_DELETE
标志。有关更多详细信息和解决方法,请参阅我在How to create a temporary file that can be read by a subprocess?问题上的回答。
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或更高版本中使用)。如果删除为真(默认),则该文件在关闭后立即删除。
+0
我刚刚尝试过使用TemporaryFile():同样的问题。问题一定是别的。 – Rnhmjoj 2013-03-23 16:45:30
相关问题
- 1. 无法访问临时文件asp.net
- 2. “hudson.util.IOException2:无法创建临时文件”
- 3. 无法创建一个临时文件
- 4. 我无法创建临时文件
- 5. 无法在Windows上用C++创建临时文件使用tmpfnam
- 6. 使用(FileStream)创建临时文件导致“进程无法访问该文件,因为它正在被使用”
- 7. 无法访问刚创建的文件
- 8. 访问/ tmp /时拒绝创建临时文件的位置?
- 9. Python - tempfile模块创建一个无法打开的文件?
- 10. Git difftool问题:无法创建临时文件
- 11. C#:创建后无法访问文件
- 12. 使用ActionScript创建临时XML文件
- 13. MySQL的:无法访问临时表
- 14. 无法访问Java创建的文件 - 有时
- 15. Java创建临时文件
- 16. 使用exec创建的文件无法在创建后立即访问?
- 17. 无法使用pyodbc创建表访问
- 18. 无法在编译时创建临时文件
- 19. ASP.NET无法访问Windows临时文件夹?
- 20. ASP.NET Web.config加密 - 无法访问临时文件
- 21. Scalate和GAE选项org.fusesource.scalate.TemplateException:无法创建临时文件
- 22. “无法创建临时文件输出中”在运行测试
- 23. WebSphere服务器 - 无法创建临时文件
- 24. 创建一个php引导文件 - 无法访问文件
- 25. org.apache.jmeter.report.dashboard.GenerationException:无法创建临时目录“temp”
- 26. 无法创建临时目录
- 27. 删除创建的临时文件
- 28. python xlrd:使用临时文件将xls转换为csv。 Tempfile为空
- 29. 创建CSV文件时出现偶然IOException'进程无法访问文件...'
- 30. android webView访问临时文件
你能告诉我们你使用它的代码吗?需要'delete = False'作为解决方法意味着它将被删除,因为您关闭了该文件。 – 2013-03-23 15:10:17
好的,我发现了这个问题。有时候文件需要被删除,为此我使用'open(tempfile.name,“w”)。close()'。这会导致IOError,因为该文件在创建后只能打开一次。现在,如何删除其内容而无需再次打开它? – Rnhmjoj 2013-03-23 17:14:51
我想你想*截断*文件;调用'.seek(0)'然后'.truncate()'。 – 2013-03-23 17:44:40