是否有独立于平台的os.startfile()?

时间:2013-06-26 10:08:29

标签: python platform

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

是否存在适用于所有平台的等效文件?

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

3 个答案:

答案 0 :(得分:36)

似乎尚不存在跨平台文件打开模块,但您可以依赖流行系统的现有基础架构。这个代码片段涵盖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])

答案 1 :(得分:1)

只需使用webbrowser.open(filename)即可。它可以在适当的地方拨打os.startfile()openxdg-open

请注意,有一个scary text in the docs

  

请注意,在某些平台上,尝试使用此方法打开文件名   功能,可以工作并启动操作系统的关联   程序。但是,既不支持也不便携。

对我来说很好。在您的环境中测试它。

请查看webbrower's source code,了解需要做多少工作才能实现便携。

Python bug跟踪器上还有一个未解决的问题 - Add shutil.open。 “便携式os.startfile()”接口比预期的更复杂。您可以尝试提交的修补程序,例如shutil.launch()

答案 2 :(得分:0)

这取决于您与平台无关的含义。例如,如果您的问题是关于如何使用操作系统的默认操作打开任何内容,则当您双击某个文件让操作系统决定如何打开它时,简单的答案是< strong>否。

但是,要自己实现此功能非常容易,但是您需要使用几种不同的方法来适应不同的OS。也就是说,最宽容的方法是使用os.system(WinPathWithArgs),正如我所解释的in this answer