如何在Django中找到临时文件的路径?

9

我正在这样使用pdftk:

pdftk template.pdf fill_form /temp/input.fdf output /temp/output.pdf

现在这个方法可以正常工作。

但是现在,我已经用以下方式生成了临时文件,而不是使用 /temp/input.fdf:

myfile = tempfile.NamedTemporaryFile()
myfile.write(fdf)
myfile.seek(0)
myfile.close()

现在我不知道如何将myfile作为输入传递给pdftk。
2个回答

13

myfile.name 将会获取文件路径。

请注意,tempfileclose() 后将不再存在。来自文档的说明:

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

返回一个类似文件的对象,可用作临时存储区。该文件是使用mkstemp()创建的。一旦关闭它(包括在对象被垃圾回收时隐式关闭),它将被销毁。在Unix下,文件的目录条目在文件创建后立即被删除。其他平台不支持此功能;您的代码不应依赖于使用此函数创建的临时文件是否在文件系统中具有可见名称。

没问题。我不会关闭它,但我该如何将它作为参数传递呢? - Mirage
myfile.name 是你想要的。 - Yuval Adam
我已经解决了这个问题。我正在让用户使用不同的名称下载该文件。我应该在什么时候调用关闭函数?还是系统会在一段时间后自动删除它? - Mirage
@user825904 你肯定需要调用close函数,可能是在读取完其内容后。 - Stephen G Tuggy
1
@YuvalAdam 我认为NamedTemporaryFile是OP需要的,而不是TemporaryFile。 - Stephen G Tuggy

8

你无法通过使用

获取名称。
myfile = tempfile.NamedTemporaryFile()
myfile.write(fdf)
myfile.seek(0)
myfile.close()
print(myfile.name)

如果你在那个时候关闭了myfile,它很可能会立即被删除,而且你将无法再使用它。https://docs.python.org/2/library/tempfile.html然而,如果你调用NamedTemporaryFile并将delete参数设置为False,这个问题应该就可以解决了。 - Stephen G Tuggy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接