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

发布于 2024-12-14 02:13:54 字数 858 浏览 0 评论 0原文

假设我有一个 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)

但是我该如何做最后一步,即如何在系统默认的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)))

Let's say I have a pdf file that I want to open in a Python script in the systems's default application for pdfs.

First, if it's kept in the regular file system I would simply open it like this:

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

Second, if I want to store the pdf file in a GridFS, I can write to the GridFS like this:

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)

I can then read the file like this:

myfile = fs.get(oid)

But how can I do the last step, that is, how can I open the pdf file in the in the systems's default application for pdfs?

EDIT:

Now I am writing the GridOut instance to a temporary file, and then opening that temporary file. It would be nice to skip that extra step of writing to the file system.

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)))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

高跟鞋的旋律 2024-12-21 02:13:54

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

You can only use IPC (interprocess communications). Python GridOut is not IPC by definition. Filesystem is IPC. Or connecting stdout of your program to stdin of your PDF program (if the program supports).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文