我需要能够使用Windows和Mac OS中的默认应用程序打开文档。基本上,我想做的事情与您在资源管理器或Finder中双击文档图标时发生的事情相同。用Python做到这一点的最佳方法是什么?
在Windows
和Mac OS
中都使用Python中的默认OS应用程序打开文档open
并且start
是为Mac OS /
X和Windows命令解释器的东西分别,要做到这一点。
要从Python调用它们,可以使用subprocessmodule
或os.system()
。
以下是有关使用哪个软件包的注意事项:
你可以通过致电给他们os.system
,该电话有效,但是…
转义: os.system
仅适用于路径名中没有空格或其他shell
元字符的文件名(例如A:\abc\def\a.txt
),否则需要转义。有shlex.quote
针对Unix
的系统,但没有Windows
的真正标准。也许还会看到python,windows
:使用shlex
解析命令行
MacOS / X:os.system("open " + shlex.quote(filename))
Windows:也应避免os.system("start " + filename)
在正确的地方说话filename
。
你也可以通过subprocess
模块调用它们,但是…
对于Python 2.7及更高版本,只需使用
subprocess.check_call(['open', filename])
在Python 3.5+中,你可以等效地使用稍微更复杂但也更通用的功能
subprocess.run(['open', filename], check=True)
如果你需要一直兼容到Python 2.4,则可以使用subprocess.call()并实现自己的错误检查:
try:
retcode = subprocess.call("open " + filename, shell=True)
if retcode < 0:
print >>sys.stderr, "Child was terminated by signal", -retcode
else:
print >>sys.stderr, "Child returned", retcode
except OSError, e:
print >>sys.stderr, "Execution failed:", e
现在,使用的好处是subprocess
什么?
'filename ; rm -rf /'”
问题,并且如果文件名可以被破坏,则使用subprocess.call
几乎没有提供额外的保护。retcode
无论哪种情况,我们仍然要依靠;但是在发生错误的情况下明确引发异常的行为肯定会帮助你注意到是否存在故障(尽管在某些情况下,回溯可能根本不比简单地忽略错误更有用)。subprocess
首选”。但是,os.system()
它不被弃用,从某种意义上说,它是完成此特定工作的最简单工具。结论:os.system()
因此使用也是正确的答案。明显的缺点是Windows start
命令要求你传递shell=True
,否定了使用的大多数好处subprocess
。
问题内容: 我想在python 3.5的默认应用程序中打开文件,特别是在记事本中打开“ screen.txt”。 我已经搜索了互联网,并找到了大多数答案。我用文件的路径尝试了此操作,但返回了一个错误,提示“行继续符后出现意外字符”。我尝试了没有文件路径的尝试,只是文件名,但仍然无法正常工作。 这个错误是什么意思?我从未见过。 请提供打开有效的.txt文件的解决方案。 编辑:我在受限(学校)计算机上
问题内容: 我想为用户提供他要编辑文件的任何选项,如何使用特定文件类型的默认程序打开文件?我需要它与Windows和Linux一起使用,但是Mac选项也很棒。 问题答案: 正如PSkocik所说,首先检测平台并获取命令行: 第二,执行命令行,然后输入路径
问题内容: 我的程序成功创建并填充了Excel(.xls)文件。创建完成后,我希望在系统的默认程序(以Excel为例)中打开新文件。我该如何实现? 对于我想在记事本中打开txt文件的旧程序,我使用了以下命令: 当我尝试将此代码用于Excel文件时,出现以下错误: 有什么建议吗? 问题答案: 尝试使用Desktop.open()而不是Desktop.edit(): 如果Desktop.open()不
问题内容: 如何使用Java中的默认关联程序打开文件?(例如电影文件) 问题答案: 你可以使用Desktop.getDesktop().open(File file)。 似乎无法使用java.awt.Desktop,必须区分以下操作系统:Windows: Linux: 苹果电脑: HTH。显然,这不是便携式的…
问题内容: 我希望图库应用程序在单独的窗口中启动,而不是在我的应用程序中启动。我也不想选择图片,我只想打开默认的图库应用程序。有些问题与此类似,但它们都并非以独立应用程序的形式打开图库,而是始终在名为的应用程序内部 。 看这里。这是我的名为SM2的应用程序。在内部,默认的图库应用程序可见,这不是所需的行为。 如果电话上没有名为“ com.android.gallery”的软件包,则以下代码无效:
问题内容: 我的Java Swing应用程序生成一个HTML文件,在生成和保存该文件时,我想用默认的浏览器将其打开。我怎样才能做到这一点? 问题答案: 如果您使用的是Java 6,请使用Desktop.open()。它允许您使用默认应用程序打开任何与系统上的文件类型相关联的文件。