我正在编写一个Python脚本,它依赖于已安装的rosetta
。Rosetta是Mac OS X的动态二进制翻译器,允许许多PowerPC应用程序在某些基于Intel的Macintosh计算机上运行而不需要修改。有没有办法检查操作系统以查看是否存在rosetta
?
我正在编写一个Python脚本,它依赖于已安装的rosetta
。Rosetta是Mac OS X的动态二进制翻译器,允许许多PowerPC应用程序在某些基于Intel的Macintosh计算机上运行而不需要修改。有没有办法检查操作系统以查看是否存在rosetta
?
如果我记得没错,Rosetta安装失败后,只需在命令行中输入translate,它会显示一些使用屏幕。如果是这样的话,那么以下类似的命令应该有效。
if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
print "Not installed"
else:
print "Installed"
如果您只是想检查具有 PPC 依赖项的内容是否能够运行,您可以进行松散的检查,即运行 CPU 类型为 PPC 或运行的 OS X 版本 >= 10.4 且 < 10.7,因为这些是支持 Rosetta 的 OS X 版本,在至少 10.6 上,如果尚未安装 Rosetta,则 OS X 将自动提示用户安装 Rosetta。请注意,Darwin 内核版本与 OS X 版本号不同,即 10.4 -> Darwin 8、10.5 -> 9 等:
>>> import os
>>> os.uname()
('Darwin', 'kitt.local', '11.4.0', 'Darwin Kernel Version 11.4.0: Mon Apr 9 19:32:15 PDT 2012; root:xnu-1699.26.8~1/RELEASE_X86_64', 'x86_64')
>>> un = os.uname()
>>> darwin_major_version = int(os.uname()[2].split('.')[0])
>>> cputype = un[4]
>>> can_run_ppc = cputype.startswith('ppc') or (darwin_major_version > 7 and darwin_major_version < 11)
>>> can_run_ppc
False
platform.mac_ver
本身也有点小技巧。无论如何,根据操作者的用例,还可能需要测试是否实际在OS X上运行,例如 sys.platform == 'darwin'
。 - Ned Deily没有官方方法可以获得这个。
Rosetta通过一个名为 /usr/libexec/oah/translate 的程序工作。官方上来说,这是一个实现细节,可能会发生变化,因此不应该依赖它。然而,我们知道它直到10.7之前从未改变,当Rosetta被完全删除时,所以尽管有警告,它仍是安全的。Maria Zverina的答案适用于这个(如果你添加路径),而且可能是最简单的。或者,只需检查是否存在这样的文件,而不是运行它。
另外,Rosetta随Intel 10.4-10.6一起提供(操作系统的早期版本仅支持PPC,没有Intel)。同样,官方上来说,您永远不应该依赖操作系统版本,而是使用适当的API来检查功能。但是,在这种情况下,似乎没有适当的API,因此也许这是合适的。除了一个警告,您不必在10.6中安装Rosetta,因此这不会检测关闭复选框的用户。如果你想要做到这一点:
import platform
release, versioninfo, machine = platform.mac_ver()
versionbits = [int(bit) for bit in release.split('.')]
rosetta = (versionbits < (10,7) and not machine.startswith('ppc'))
(请注意,这也是“不好的”,因为在某些版本中platform.mac_ver()会执行一些你不应该做的hacky的操作——获取OS X版本位的正确方法是调用Gestalt。但mac_ver()是标准库的一部分,所以至少你可以依赖它尽可能地执行hacky的操作,并且经过广泛测试。)
如果你实际上并不需要Rosetta,而只是想知道是否可以通过本机或通过Rosetta运行PPC,那就更简单了。所有不带有Rosetta的10.7以下预安装版本都是PPC;所有10.7+的版本都不能运行PPC。因此,只需使用“release< '10.7'”即可。(同样,请注意10.6可以选择跳过Rosetta安装。)