无法打开 LibreOffice calc 文件 fom python



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

xlsx_app = r'C:Program FilesLibreOfficeprogramscalc.exe'
Popen ([xlsx_app, fname])

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

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

但是它只是打开calc然后关闭…我已经试过使用"call"、"pipe"等工具了。, "shell = False",它总是相同的-也可以不带'——calc'参数。

是否有一种特殊的方式来打开calc文件与python在linux中?

提前感谢,

多亏了Rahul Bharadwaj,我意识到问题出在别的地方…不知道在哪里,但是,从这篇文章中,有人建议使用'xdg-open',打开任何文件或url:

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

xdg-open使用分配给文件类型或url的应用程序,我知道能够选择应用程序会更好,但在我的情况下,如果文件在预期的应用程序中打开(在这种情况下,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。

最新更新