首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyinstaller和xdg-open

Pyinstaller和xdg-open
EN

Stack Overflow用户
提问于 2018-11-17 18:27:57
回答 2查看 323关注 0票数 3

我想问,是否有人对我的问题有解决的办法或线索。

我正在使用一个用于Python开发的PyCharm编辑器。每当我运行包含来自os.system("xdg-open file.pdf")的PyCharm的代码时,一切都会如愿以偿。但是,每当我使用PyInstaller打包我的代码时,这个命令就会失败,没有任何错误消息或线索,发生什么事,做什么,或者从哪里开始搜索来解决这个问题(我知道,os.system()命令没有从已启动的命令中捕捉到任何消息,但是根本没有任何线索)。

我已经想尽一切办法,尽我所能。我尝试过其他启动程序,比如exo-openmimeopen;我尝试从Python代码中运行一个外部bash脚本,其中包含上述各种组合中的命令,我尝试创建一个外部bash二进制文件(使用PyInstaller),它只执行os.system("xdg-open" + sys.argv[1])命令(因为我在程序外部二进制文件的其他地方调用,它工作得很好),没有任何线索,不知道为什么不起作用。

当我尝试使用bash的纯命令xdg-open file.pdf时,一切都很好。*)

因为我也为Linux和Windows编写了程序,所以在Windows上不存在这种故障。在这里,我经常查看PDF文件命令os.system("start './file.pdf'"),然后就会发生这种情况。

我不知道,这个问题的根源是什么,也可能是PyInstaller问题,作为一个系统问题。

有没有类似的经验和可能的线索或解决方案?您的回复将是非常欢迎的&非常感谢!

配置:

  • Linux 18.2 64位(内核4.8.0-53-泛型)
  • Xfce4图形环境
  • Python 2.7
  • PyCharm 2018年(最新版本)
  • 巴什4.3
  • PyInstaller 3.4 (使用pip安装)

电脑是联想ThinkPad T410。

*)可能会有所帮助,或者会造成更多的混乱,但无论如何:在测试过程中,我还尝试从我的程序中运行纯终端,手动传递xdg-open命令。但是当我这么做的时候,没有错误信息,但什么也没有发生。我还试着直接运行PDF查看器,从普通终端运行一切正常,但是从我的程序打开的终端上运行PDF查看器,但是有大量与GTK相关的丢失图标的错误(而且file.pdf也没有打开),所以它通常会失败(不存在图标,也没有打开文件(顺便说一下,错误消息是“打开mimetype应用程序/八元流失败”)。这种行为会导致一些用户/路径/环境问题,但我仍然完全不知道发生了什么,以及如何修复它。

当然,我先尝试过谷歌叔叔,但没有成功。是的,这是可能的,我没有找到适当的问题给他,在这种情况下请给我一些建议;)

EN

回答 2

Stack Overflow用户

发布于 2019-02-15 18:03:47

由于两个月前没有回应,所以似乎没有人对这个问题感兴趣。

我仍然不确定是什么引起了这个问题,但现在看来,它是否有效,所以只是作为证据,我写了什么,我认为,这是这种不愉快行为的可能来源。

我最近更新了内核4.8到内核4.19.21,我尝试作为PDF查看器/编辑Foxit 2.4.4.0911 (几天前下载) (https://www.foxitsoftware.com/downloads/),因为我有这个配置,从我的程序工作打开PDF,甚至我仍然在使用PyInstaller 3.4。

我不太清楚问题的根源是什么,因为我没有将Foxit Reader设置为默认的PDF查看器并在其中打开,也可以作为内核/英特尔视频驱动程序问题的来源,也许是因为我放弃了Xreader作为默认PDF查看器。也许是mimetype的一些问题(例如,DoubleCommander或Mutt不尊重系统mimetype设置,并试图根据自己的意愿在程序中打开文件,我仍然无法弄清楚,为什么和如何改变它),谁知道,当我是这个问题。

在所有情况下,在具有上述配置的LinuxMint18.2机器上,它现在都能正常工作,就像预期的那样。

票数 0
EN

Stack Overflow用户

发布于 2021-03-11 23:52:06

这与此处提到的PyInstaller问题有关:https://github.com/pyinstaller/pyinstaller/issues/3668

就目前而言,这应该是可行的:

代码语言:javascript
复制
myEnv = dict(os.environ)
lp_key = 'LD_LIBRARY_PATH'
lp_orig = myEnv.get(lp_key + '_ORIG')
if lp_orig is not None:
    myEnv[lp_key] = lp_orig
else:
    lp = myEnv.get(lp_key)
    if lp is not None:
        myEnv.pop(lp_key)

subprocess.Popen(["xdg-open", "file.pdf"], env=myEnv)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53354232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档