是否有一个独立于平台的 os.startfile() 等价物?

新手上路,请多包涵

我想在多个平台(包括 Mac OS)上运行一个程序,所以我尽量保持它与平台无关。我自己使用 Windows,我有一行 os.startfile(file) 。这适用于我,但不适用于其他平台(我阅读了文档,我还没有为自己测试过)。

是否有适用于所有平台的等效项?

顺便说一下,该文件是一个 .wav 文件,但我希望用户能够使用他们的标准媒体播放器,这样他们就可以暂停/倒回文件。这就是我使用 os.startfile() 的原因。我也许能够使用也允许播放/暂停/倒带媒体文件的库。

原文由 Lewistrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

跨平台的文件打开模块似乎还不存在,但你可以依赖流行系统的现有基础设施。这段代码涵盖了 Windows、MacOS 和类 Unix 系统(Linux、FreeBSD、Solaris…):

 import os, sys, subprocess

def open_file(filename):
    if sys.platform == "win32":
        os.startfile(filename)
    else:
        opener = "open" if sys.platform == "darwin" else "xdg-open"
        subprocess.call([opener, filename])

原文由 user4815162342 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需使用 webbrowser.open(filename) 。它可以调用 os.startfile() , open , xdg-open 在适当的地方。

当心, 文档中有一段可怕的文字

请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的相关程序。但是,这既不受支持也不可移植。

这对我来说可以。在您的环境中对其进行测试。

查看 webbrower 的源代码,看看需要做多少工作才能移植。

Python 错误跟踪器上还有一个未解决的问题—— 添加 shutil.open 。 “portable os.startfile()”接口结果比预期的要复杂。您可以尝试提交的补丁,例如 shutil.launch()

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题