我需要能够使用Windows和Mac OS中的默认应用程序打开文档。基本上,我想做的事情与您在资源管理器或Finder中双击文档图标时发生的事情相同。用Python做到这一点的最佳方法是什么?
在Windows和Mac OS中都使用Python中的默认OS应用程序打开文档open并且start是为Mac OS /X和Windows命令解释器的东西分别,要做到这一点。
Windows
Mac OS
open
start
Mac OS /
要从Python调用它们,可以使用subprocessmodule或os.system()。
subprocessmodule
os.system()
以下是有关使用哪个软件包的注意事项:
你可以通过致电给他们os.system,该电话有效,但是…
os.system
转义: os.system仅适用于路径名中没有空格或其他shell元字符的文件名(例如A:\abc\def\a.txt),否则需要转义。有shlex.quote针对Unix的系统,但没有Windows的真正标准。也许还会看到python,windows:使用shlex解析命令行
shell
A:\abc\def\a.txt
shlex.quote
Unix
python,windows
shlex
MacOS / X:os.system("open " + shlex.quote(filename))
os.system("open " + shlex.quote(filename))
Windows:也应避免os.system("start " + filename)在正确的地方说话filename。 你也可以通过subprocess模块调用它们,但是…
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
明显的缺点是Windows start命令要求你传递shell=True,否定了使用的大多数好处subprocess。
Windows start
shell=True