是否有一个与平台无关的os.startfile()等价物?

2024-05-20 17:58:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在几个平台(包括Mac OS)上运行一个程序,所以我尽量让它独立于平台。我自己用Windows,我有一行os.startfile(file)。这对我有效,但在其他平台上不行(我在文档中看到了,我还没有测试过自己)。

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

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


Tags: 文件用户文档程序标准oswindowsmac
3条回答

只要用^{}。它可以在适当的地方调用os.startfile()openxdg-open

小心,这里有一个scary text in the docs

Note that on some platforms, trying to open a filename using this function, may work and start the operating system’s associated program. However, this is neither supported nor portable.

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

查看^{}'s source code以了解需要做多少工作才能进行移植。

Python bug tracker上也有一个公开问题——Add shutil.open。”portable os.startfile()“接口比预期的要复杂。您可以尝试提交的修补程序,例如^{}

这取决于你所说的平台无关性。如果您的问题是如何使用操作系统的默认操作打开任何文件,例如,当您双击某个文件让操作系统决定如何打开它时,简单的答案是

然而,要自己实现这个功能是非常容易的,但是您需要使用一些不同的方法来适应不同的操作系统,也就是说,最宽容的方法是使用os.system(WinPathWithArgs),正如我所解释的in this answer

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

相关问题 更多 >