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

3 投票
1 回答
1441 浏览
提问于 2025-04-17 05:44

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

首先,如果这个文件保存在普通的文件系统中,我可以这样打开它:

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)

但是我该怎么做最后一步呢,也就是如何在系统默认的PDF应用程序中打开这个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)))

1 个回答

0

你只能使用进程间通信(IPC)。根据定义,Python的GridOut并不是进程间通信。文件系统算是一种进程间通信。或者,你可以把你程序的输出(stdout)连接到你的PDF程序的输入(stdin),前提是那个程序支持这种操作。

撰写回答