无法从 python 打开 LibreOffice calc 文件

问题描述

我正在将各种 python 脚本从 windows 迁移到 linux(windows 8、debian 10.8、python 3.7);其中一个结果显示在 excel 文件中:

xlsx_app = r'C:\Program Files\LibreOffice\program\scalc.exe'
Popen ([xlsx_app,fname])

(fname是excel文件的路径) 现在在 linux 上我试过了:

p = Popen(['libreoffice','--calc',fname])

但它只是打开 calc 然后它关闭......我已经尝试过使用 "call"、"PIPE"、"shell = False",而且它总是一样的 - 也试过没有 '--calc'参数。

有没有什么特别的方法可以在linux下用python打开calc文件

提前致谢,

解决方法

感谢 Rahul Bharadwaj,我意识到问题依赖于其他地方......不知道在哪里,但是,从 this post 开始,有人建议使用“xdg-open”,它可以打开任何文件或网址:

Popen(['xdg-open',fname])

xdg-open 使用分配给文件类型或 url 的应用程序,我知道能够对应用程序进行 pic 会更好,但在我的情况下,如果文件在预期的应用程序中打开(在此案例,libreoffice calc) 就足够了。

谢谢!

,

我依稀记得有这个问题,但不再记得我为什么选择这个解决方案。

>>> from subprocess import Popen
>>> pid = Popen(['/usr/bin/loffice','data.csv'],close_fds=True).pid
>>> print (pid)
21948

我的直觉是,close_fds=True 参数是造成差异的原因。

如果close_fds为true,在子进程执行之前,除了0、1、2之外的所有文件描述符都会被关闭。否则,当 close_fds 为 false 时,文件描述符遵循其继承标志,如文件描述符的继承中所述。

文件描述符的继承

文件描述符有一个“可继承”标志,表明文件描述符是否可以被子进程继承。从 Python 3.4 开始,Python 创建的文件描述符默认是不可继承的。

在 UNIX 上,不可继承的文件描述符在执行新程序时在子进程中关闭,其他文件描述符被继承。

我想这并不重要,因为你有一个解决方案,但我想我会加入我在 Linux 上成功使用的东西,在一个单独的过程中启动 LibreOffice Calc。