我正在编写一个Python脚本,它将依赖于正在安装的rosetta。Rosetta是Mac的动态二进制翻译器,它允许许多PowerPC应用程序在某些基于英特尔的Macintosh计算机上运行,而无需修改。有没有办法检查操作系统,看看rosetta是否在那里?
发布于 2012-07-10 02:21:38
我已经不再安装rosetta了,但是如果我没记错的话,如果你只需要输入translate (rosetta命令行),它会给出某种用法界面。如果是这样的话,像这样的东西应该可以工作。
if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
print "Not installed"
else:
print "Installed"发布于 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等:
>>> 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-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,所以这不会检测到关闭复选框的用户。如果你想这样做:
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安装。)
https://stackoverflow.com/questions/11400677
复制相似问题