我想在多个平台(包括 Mac OS)上运行一个程序,所以我尽量保持它与平台无关。我自己使用 Windows,我有一条os.startfile(file)
. 这对我有用,但不适用于其他平台(我在文档中阅读过,我没有为自己测试过)。
是否有适用于所有平台的等价物?
顺便说一句,该文件是一个.wav
文件,但我希望用户能够使用他们的标准媒体播放器,以便他们可以暂停/倒带该文件。这就是我使用os.startfile()
. 我也许可以使用还允许播放/暂停/倒带媒体文件的库。
跨平台文件打开模块似乎还不存在,但您可以依赖流行系统的现有基础架构。这个片段涵盖了 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])
只需使用webbrowser.open(filename)
. 它可以在适当的地方调用, os.startfile()
。open
xdg-open
请注意,文档中有一段可怕的文字:
请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的关联程序。但是,这既不支持也不可移植。
这对我来说可以。在您的环境中测试它。
查看webbrower
的源代码,了解需要做多少工作才能实现可移植性。
Python 错误跟踪器还有一个未解决的问题——添加 shutil.open。“portable os.startfile()”接口比预期的要复杂。您可以尝试提交的补丁,例如shutil.launch()
.
这取决于您对平台无关的含义。如果您的问题是关于如何使用操作系统的默认操作打开任何内容,例如,当您双击某个文件让操作系统决定如何打开它时,那么简单的答案是否定的。
但是,要自己实现此功能非常容易,但您需要使用几种不同的方法来适应不同的操作系统。也就是说,最宽容的方法是使用os.system(WinPathWithArgs)
我在这个答案中解释的方法。
尝试这个:
import subprocess
subprocess.Popen(["open", 'directory'])