【问题标题】:How to open a file with the standard application?如何使用标准应用程序打开文件?
【发布时间】:2010-12-13 09:09:38
【问题描述】:

我的应用程序将 PDF 打印到临时文件。如何使用 Python 中的默认应用程序打开该文件?

我需要一个解决方案

  • 窗户
  • Linux(Ubuntu 和 Xfce,如果没有更通用的。)

相关

【问题讨论】:

  • “标准应用程序”? PDF 文档查看器?鬼脚本? GS? Adobe阅读器?您是否希望操作系统将文件类型映射到应用程序?你要什么?
  • @S.Lott 我认为“标准应用程序”显然是默认应用程序的同义词,所以让操作系统决定运行哪个应用程序。
  • @danio:对某些人来说,这可能是“明显的同义词”。然而,这个问题并没有以任何有用的方式定义“标准应用程序”。我不想假设,因为其他人将来会提到这个问题。

标签: python windows linux


【解决方案1】:

os.startfile 目前仅适用于 windows,但xdg-open 将适用于任何运行 X 的 unix 客户端。

if sys.platform == 'linux2':
    subprocess.call(["xdg-open", file])
else:
    os.startfile(file)

【讨论】:

  • 2012年更好用sys.platform.startswith('linux')
  • 错误。 xdg-open 在 OS X 上不可用。此外,os.startfile 在 OS X 上不可用。
  • @ArtOfWarfare:webbrowser module 在 OS X 上工作吗? (it should use open command那里)
  • @jfs 是的,我在切换到 linux 之前使用它
【解决方案2】:

在 Windows 上它适用于 os.system('start <myFile>')。在 Mac 上(我知道你没有问...)它是 os.system('open <myFile>')

【讨论】:

  • 在 Mac 上我确实知道如何操作,但我的应用程序在不久的将来不会在 Mac 上运行。 ;)
【解决方案3】:

使用浏览器认为合适的应用程序打开文件:

import webbrowser
webbrowser.open_new_tab(filename)

【讨论】:

    【解决方案4】:
    if linux:
        os.system('xdg-open "$file"') #works for urls too
    else:
        os.system('start "$file"') #a total guess
    

    【讨论】:

      【解决方案5】:

      为了让 NicDumZ 的解决方案完全按照给定的方式工作,需要进行小幅修正。问题在于使用“is”运算符。一个可行的解决方案是:

      if sys.platform == 'linux2':
          subprocess.call(["xdg-open", file])
      else:
          os.startfile(file)
      

      Is there a difference between `==` and `is` in Python? 对此主题进行了很好的讨论。

      【讨论】:

      • 谢谢。我已经编辑了他的答案以纠正那个小错误。
      【解决方案6】:

      询问您最喜欢的应用程序框架如何在 Linux 中执行此操作。

      只要您使用 GTK,这将适用于 Windos 和 Linux:

      import gtk
      gtk.show_uri(gtk.gdk.screen_get_default(), URI, 0)
      

      URI 是文件的本地 URL

      【讨论】:

      • 我正在使用Tkinter...我看不到任何类似的功能。 GTK 绝对不是我最喜欢的应用程序框架(Tkinter 可能也不是,但这是我在这个项目中使用的。)
      猜你喜欢
      • 2018-02-20
      • 2016-08-03
      • 1970-01-01
      • 2011-11-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多