4

我正在开发一个依赖于rosetta安装的 Python 脚本。Rosetta 是适用于 Mac OS X 的动态二进制转换器,它允许许多 PowerPC 应用程序无需修改即可在某些基于 Intel 的 Macintosh 计算机上运行。无论如何要检查操作系统以查看是否rosetta存在?

4

3 回答 3

3

还没有安装 Rosetta,但如果我没记错的话,如果你只输入translate(rosetta 命令行),它会给出某种使用屏幕。如果是这样,这样的事情应该可以工作。

if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
  print "Not installed"
else:
  print "Installed"
于 2012-07-09T18:21:38.157 回答
0

如果您真的只是想检查是否有可能运行具有 PPC 依赖性的东西,您可以松散地检查正在运行的 CPU 类型是 PPC 或正在运行的 OS X 版本 >= 10.4 和 < 10.7,因为这些是 OS X 版本在支持 Rosetta 的情况下,至少在 10.6 上,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
于 2012-07-09T19:06:08.743 回答
0

没有官方的方法可以得到这个。

Rosetta 通过一个名为 /usr/libexec/oah/translate 的程序工作。正式地,这是一个可能会更改的实现细节,因此不应依赖。然而,我们知道它直到 10.7 才发生变化,当时罗塞塔被完全杀死,所以尽管有警告,但它是安全的。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的东西,并且它正在被广泛测试。)

If you're not actually after Rosetta, but whether you can run PPC either natively or via Rosetta, that's even simpler. All pre-10.7 versions that don't come with Rosetta are PPC; all 10.7+ versions can't run PPC period. So, just "release < '10.7'" does it. (Again, with the caveat that 10.6 can optionally skip Rosetta install.)

于 2012-07-09T19:17:47.227 回答