如何判断是否安装了rosetta?MacPython公司

2024-05-16 19:49:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在开发一个python脚本,它将依赖于安装的rosetta。有没有办法检查一下操作系统,看看罗塞塔是否在那里?在

谢谢!在


Tags: 脚本rosetta办法检查一下
3条回答

现在还没有安装rosetta,但如果我没记错的话,如果你只需要输入translate(rosetta命令行),它会给出一些用法屏幕。如果是这样的话,这样的事情应该行得通。在

if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
  print "Not installed"
else:
  print "Installed"

没有官方途径可以得到这个。在

Rosetta通过一个名为/usr/libexec/oah/translate的程序工作。从官方角度讲,这是一个可能会发生变化的实现细节,因此不应依赖于此。然而,我们知道它从来没有改变,直到10.7,当罗塞塔被完全杀死,所以它是安全的,尽管有警告。Maria Zverina的答案就是这样(如果你加上路径的话),这可能是最简单的。或者,也许,只是检查是否存在这样的文件,而不是运行它。在

另外,Rosetta还附带了intel10.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'))

(请注意,这也是“坏的”,因为在某些版本中平台.mac\u()做了一些你不应该做的事情,获得OSX版本的正确方法是调用格式塔。但是mac\u ver()是标准库的一部分,因此至少您可以依赖它来尽可能地完成一些骇人听闻的工作,而且它正在进行广泛的测试。)

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

如果你真的只是想检查一些与PPC相关的东西是否会运行,你可以检查一下运行的CPU类型是PPC还是运行中的OS X版本>;=10.4和<;10.7,因为这些是支持Rosetta的OS X版本,至少在10.6上,如果Rosetta还没有安装,OSX会在需要时自动提示用户安装它。请注意,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

相关问题 更多 >