Как узнать, установлена ли розетка? --MacPython
Поэтому я работаю над сценарием Python, который будет опираться на установку Rosetta. Есть ли способ проверить ОС, чтобы увидеть, есть ли там розетта?
Спасибо!
4 ответа
У меня больше не установлено rosetta, но, если я правильно помню, это даст какой-то экран использования, если вы просто наберете translate (rosetta command line). Если так, что-то вроде этого должно работать.
if os.system("/usr/libexec/oah/translate > /dev/null 2>&1"):
print "Not installed"
else:
print "Installed"
Официального способа получить это не существует.
Rosetta работает через программу /usr/libexec/oah/translate. Официально это деталь реализации, которая может быть изменена, и на нее не следует полагаться. Тем не менее, мы знаем, что он никогда не менялся до 10.7, когда Розетта была полностью убита, так что это безопасно, несмотря на предостережения. Ответ Марии Звериной подходит для этого (если вы добавите путь), и он, вероятно, самый простой. Или, может быть, просто проверьте наличие такого файла, а не запустите его.
Кроме того, Rosetta поставлялась с Intel 10.4-10.6 (более ранние версии ОС были только для PPC и не имели Intel). Опять же, официально вы никогда не должны полагаться на версию ОС, вместо этого используя соответствующие API для проверки функций. Но в этом случае, похоже, нет подходящих API, так что, возможно, это уместно. За исключением предупреждения о том, что вам не нужно устанавливать Rosetta с 10.6, поэтому он не обнаружит пользователей, которые отключили этот флажок. Если вы хотите сделать это:
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 - это вызвать Gestalt. Но mac_ver () является частью стандартной библиотеки, так что, по крайней мере, вы можете положиться на то, что она делает хакерские вещи настолько хорошо, насколько это возможно, и она широко тестируется.)
Если вы на самом деле не гонитесь за Rosetta, но можете ли вы запускать PPC как с самого начала, так и через Rosetta, это еще проще. Все версии до 10.7, которые не поставляются с Rosetta, являются PPC; все версии 10.7+ не могут запускать период PPC. Так что, просто "release <'10.7 '" делает это. (Опять же, с оговоркой, что 10.6 может опционально пропустить установку Rosetta.)
Если вы действительно просто пытаетесь проверить, будет ли работать что-то с зависимостью PPC, вы можете проверить, что тип используемого процессора - 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