首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断是否安装了rosetta?

如何判断是否安装了rosetta?
EN

Stack Overflow用户
提问于 2012-07-10 02:12:03
回答 3查看 7.3K关注 0票数 4

我正在编写一个Python脚本,它将依赖于正在安装的rosetta。Rosetta是Mac的动态二进制翻译器,它允许许多PowerPC应用程序在某些基于英特尔的Macintosh计算机上运行,而无需修改。有没有办法检查操作系统,看看rosetta是否在那里?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-10 02:21:38

我已经不再安装rosetta了,但是如果我没记错的话,如果你只需要输入translate (rosetta命令行),它会给出某种用法界面。如果是这样的话,像这样的东西应该可以工作。

代码语言:javascript
复制
if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
  print "Not installed"
else:
  print "Installed"
票数 3
EN

Stack Overflow用户

发布于 2012-07-10 03:06:09

如果你真的只是想检查是否有PPC依赖的东西可能会运行,你可以做一个宽松的检查,看看运行的CPU类型是PPC还是运行的OS X版本>= 10.4和< 10.7,因为这些是支持Rosetta的OS X版本,至少在10.6版本上,OS X会在需要时自动提示用户安装Rosetta。注意,Darwin内核版本与OS X版本号不同,即10.4 -> Darwin 8、10.5 -> 9等:

代码语言:javascript
复制
>>> 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
票数 0
EN

Stack Overflow用户

发布于 2012-07-10 03:17:47

没有官方的方法可以做到这一点。

Rosetta通过一个名为/usr/libexec/oah/translate的程序工作。按照官方说法,这是一个可能会发生变化的实现细节,因此不应该依赖。然而,我们知道直到10.7,Rosetta被完全杀死,它才发生变化,所以尽管有警告,它仍然是安全的。Maria Zverina的答案适用于此(如果您添加路径),它可能是最简单的。或者,也许只是检查是否存在这样的文件,而不是运行它。

或者,Rosetta附带了Intel 10.4-10.6 (早期版本的操作系统仅支持PPC,没有Intel)。再说一次,官方上你永远不应该依赖于操作系统版本,而是使用适当的API来检查特性。但在这种情况下,似乎没有任何合适的API,所以这可能是合适的。除了需要注意的是,您不必在10.6中安装Rosetta,所以这不会检测到关闭复选框的用户。如果你想这样做:

代码语言:javascript
复制
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版本位的正确方法是调用格式塔。但是mac_ver()是标准库的一部分,所以至少您可以依靠它尽可能地做一些棘手的事情,并且经过了广泛的测试。)

如果你不是真的想要Rosetta,但不管你是本机运行PPC还是通过Rosetta运行PPC,那就更简单了。所有未附带Rosetta的10.7之前的版本都是PPC;所有10.7+版本都不能运行PPC周期。所以,只要"release < '10.7'“就可以了。(再次声明,10.6可以选择跳过Rosetta安装。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11400677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档