我想在几个平台(包括Mac )上运行一个程序,所以我尽量保持它的平台无关性。我自己用Windows,我有一行os.startfile(file)。这对我来说是有效的,但在其他平台上就不行了(我在文档中读到了,我还没有亲自测试过)。
有没有适用于所有平台的等价物?
顺便说一句,这个文件是一个.wav文件,但我希望用户能够使用他们的标准媒体播放器,这样他们就可以暂停/回放文件。这就是我使用os.startfile()的原因。我也许能够使用同样允许播放/暂停/倒带媒体文件的库。
发布于 2013-06-26 18:22:05
似乎还不存在跨平台的文件打开模块,但您可以依赖流行系统的现有基础设施。这段代码涵盖了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])发布于 2014-02-24 20:30:32
只需使用webbrowser.open(filename)即可。它可以在适当的地方调用os.startfile()、open、xdg-open。
当心,这里有一个scary text in the docs
请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的相关程序。但是,这既不受支持,也不能移植。
它对我来说很好。在您的环境中测试它。
看看webbrower's source code,看看需要做多少工作才能实现可移植性。
还有一个关于Python bug跟踪器的公开问题-- Add shutil.open。“可移植的os.startfile()”接口比预期的要复杂得多。你可以尝试一下提交的补丁,例如shutil.launch()。
发布于 2018-11-04 22:56:55
这取决于您对平台无关性的理解。如果你的问题是关于如何使用操作系统的默认操作打开任何东西,例如,当你双击某个文件时,让操作系统决定如何打开它,那么简单的答案是no。
然而,自己实现这个功能非常简单,但你需要使用一些不同的方法来适应不同的操作系统,也就是说,最好的方法是像我已经解释过的in this answer那样使用os.system(WinPathWithArgs)。
https://stackoverflow.com/questions/17317219
复制相似问题