所以我正在开发一个依赖于rosetta安装的python脚本。无论如何要检查操作系统是否有罗塞塔?
谢谢!
答案 0 :(得分:3)
还没有安装rosetta但是如果我没记错的话,如果只输入 translate (rosetta命令行),它会给出某种用法屏幕。如果是这样,这样的事情应该有效。
if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
print "Not installed"
else:
print "Installed"
答案 1 :(得分:0)
如果您真的只是想检查是否可能会运行具有PPC依赖性的内容,则可以检查正在运行的CPU类型是PPC还是正在运行的OS X版本> = 10.4并且< 10.7因为那些是支持Rosetta的OS X版本,并且至少在10.6上,OS X会自动提示用户在需要时安装Rosetta(如果尚未安装)。请注意,Darwin内核版本与OS X版本号不同,即10.4 - >达尔文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
答案 2 :(得分:0)
没有正式的方法可以解决这个问题。
Rosetta通过名为/ usr / libexec / oah / translate的程序工作。正式来说,这是一个实施细节,可能会有所变化,因此不应该依赖。但是,我们知道它直到10.7才发生变化,当Rosetta被完全杀死时,尽管存在警告,它仍然是安全的。 Maria Zverina的答案适用于此(如果你添加路径),它可能是最简单的。或者,也许只是检查是否存在这样的文件而不是运行它。
或者,Rosetta附带英特尔10.4-10.6(操作系统的早期版本仅限PPC且没有英特尔)。再说一次,官方你永远不应该依赖操作系统版本,而是使用适当的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期间。所以,只需“发布&lt; '10 .7'”即可。 (再次注意,10.6可以选择跳过Rosetta安装。)