如何在 PyMongo 的 GridFS 中打开文件的 GridOut 实例?

Posted

技术标签:

【中文标题】如何在 PyMongo 的 GridFS 中打开文件的 GridOut 实例?【英文标题】:How can I open a GridOut instance of a file in a GridFS in PyMongo? 【发布时间】:2011-12-22 22:33:08 【问题描述】:

假设我有一个 pdf 文件,我想在系统默认的 pdf 应用程序中的 Python 脚本中打开它。

首先,如果它保存在常规文件系统中,我会像这样打开它:

import os
os.system('Open /Users/Doe/Documents/mypdf.pdf')

其次,如果我想将 pdf 文件存储在 GridFS 中,我可以这样写入 GridFS:

from pymongo import Connection
from gridfs import GridFS
db = Connection().text_database
fs = GridFS(db)
with open('/Users/Doe/Documents/mypdf.pdf') as mypdf: 
    oid = fs.put(mypdf)

然后我可以像这样读取文件:

myfile = fs.get(oid)

但是最后一步怎么做,也就是怎么在系统默认的pdfs应用中打开pdf文件呢?

编辑:

现在我将 GridOut 实例写入一个临时文件,然后打开该临时文件。跳过写入文件系统的额外步骤会很好。

import tempfile
temp_path = tempfile.mkdtemp()
with open(os.path.join(temp_path, myfile.filename), 'w') as f:
    f.write(myfile.read())
os.system('open '.format(os.path.join(temp_path, myfile.filename)))

【问题讨论】:

你有没有发现其他东西? 您找到解决此问题的方法了吗? user3404455提问 【参考方案1】:

您只能使用 IPC(进程间通信)。根据定义,Python GridOut 不是 IPC。文件系统是IPC。或者将程序的标准输出连接到 PDF 程序的标准输入(如果程序支持)。

【讨论】:

以上是关于如何在 PyMongo 的 GridFS 中打开文件的 GridOut 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 PyMongo 和 Bottle 显示来自 MongoDB 数据库的图像?

Pymongo GridFS 放置类型/属性错误

使用烧瓶中的 send_file() 时文件损坏,pymongo gridfs 中的数据

gridfs "list" 方法返回非空集合的空列表

pymongo 无法检索文件

使用Python将MongoDB的GirdFS的文件导出