繁体   English   中英

如何判断是否安装了rosetta?

[英]How to tell if rosetta is installed?

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

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

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,因为这些是 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

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

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() 做了一些你不应该做的事情——获取 OS X 版本位的正确方法是调用格式塔。但是 mac_ver()是标准库的一部分,所以至少你可以依靠它尽可能好地做一些hacky的事情,并且它得到了广泛的测试。)

如果您实际上不是在追求 Rosetta,但是无论您是可以本地运行还是通过 Rosetta 运行 PPC,那就更简单了。 Rosetta 未附带的所有 10.7 之前的版本都是 PPC; 所有 10.7+ 版本都不能运行 PPC 时期。 所以,只要“release < '10.7'”就可以了。 (同样,需要注意的是 10.6 可以选择跳过 Rosetta 安装。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM