Python写入mkstemp()文件

Python写入mkstemp()文件,python,mkstemp,Python,Mkstemp,我正在使用以下命令创建tmp文件: from tempfile import mkstemp 我正在尝试在此文件中写入: tmp_file = mkstemp() file = open(tmp_file, 'w') file.write('TEST\n') 确实,我关闭了文件并正确地执行了操作,但是当我尝试对tmp文件进行cat时,它仍然是空的。它看起来很基本,但我不知道为什么它不工作,有什么解释吗?mkstemp()返回一个带有文件描述符和路径的元组。我认为问题在于你写错了方向。(您正在

我正在使用以下命令创建tmp文件:

from tempfile import mkstemp
我正在尝试在此文件中写入:

tmp_file = mkstemp()
file = open(tmp_file, 'w')
file.write('TEST\n')
确实,我关闭了文件并正确地执行了操作,但是当我尝试对tmp文件进行cat时,它仍然是空的。它看起来很基本,但我不知道为什么它不工作,有什么解释吗?

mkstemp()
返回一个带有文件描述符和路径的元组。我认为问题在于你写错了方向。(您正在写入的路径类似于
”(5,“/some/path”)
)您的代码应该如下所示:

from tempfile import mkstemp

fd, path = mkstemp()

# use a context manager to open the file at that path and close it again
with open(path, 'w') as f:
    f.write('TEST\n')

# close the file descriptor
os.close(fd)

smarx的回答通过指定
路径
打开文件。但是,更容易指定
fd
。在这种情况下,上下文管理器会自动关闭文件描述符:

from tempfile import mkstemp

fd, path = mkstemp()

# use a context manager to open (and close) file descriptor fd (which points to path)
with open(fd, 'w') as f:
    f.write('TEST\n')

# This causes the file descriptor to be closed automatically

本例使用打开Python文件描述符来编写酷的东西,然后将其关闭(在
with
上下文块的末尾)。其他非Python进程可以使用该文件。最后,文件被删除

import os
from tempfile import mkstemp

fd, path = mkstemp()

with os.fdopen(fd, 'w') as fp:
    fp.write('cool stuff\n')

# Do something else with the file, e.g.
# os.system('cat ' + path)

# Delete the file
os.unlink(path)

是的,我做。file.close(),我甚至尝试获取fd并使用os.close(fd)关闭它。我尝试同时使用这两种方法,当我执行path=mkstemp()时,它只返回文件的路径。它仍然以正确的路径创建文件,这就是为什么我认为这不是问题所在。@SteevenBrunner我不明白这是怎么回事。如果您执行
path=mkstemp();打印(路径)
,输出是什么?我很确定它必须是一个元组。@SteevenBrunner您使用的是什么版本的Python?(可能旧版本有不同的行为。)我的错误是,我打印了fd,temp_file=mkstemp()打印'\n'+temp_file,我甚至没有注意到它。是的,你是对的,它返回一个元组,很抱歉浪费时间:(@smarxI试图添加注释,但其格式不正确。因此,我将其作为答案添加。感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。正确的解释将极大地提高其长期价值,说明这是一个很好的问题解决方案的原因,并使其对未来的重新发布更有用请编辑您的答案以添加一些解释,包括您所做的假设。我认为此解决方案更好,但您需要使用
os.fdopen()
而不是
open()
(至少在python 2.7中,我不确定python 3)是的,导入os;从tempfile import mkstemp;fd,path=mkstemp(),os.fdopen(fd,'w')作为f:f.write('TEST\n')在python 2和3之间兼容。