Уведомления

Группа в Telegram: @pythonsu

#1 Июль 12, 2010 11:26:10

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Автоматическое определение ОС.

Андрей Светлов
за информацию о 2.7/3.2 спасибо, не знал.
Только какое-то немного сомнительное решение.
Рассмотрим такую ситуацию: мне нужно подключать разные dll в зависимости от используемой архитектуры.
В старом подходе все было ясно. Теперь же прийдется делать какую-то другую проверку. Ведь если у меня 32 битный питон, то уже не столь важно, какая разрядность у самой винды - будут работать только 32 битные расширения и точка.
Сорри, я немного ошибся в предыдущем сообщении. Изменили platform.machine, а не platform.architecture. platform.architecture по-прежнему будет возвращать разрядность интерпретатора. Вобщем, изменение вполне оправданное.

Андрей Светлов
К переменным окружения отношусь несколько настороженно. При запуске дочернего процесса они, конечно, наследуются по умолчанию. Но вместе с тем запускающий процесс может установить их как душа пожелает или вообще сбросить. Получится, что ваш код имеет шанс неправильно отработать только из-за того, что криворукий программист сделал несовсем корректную заускалку. Выяснение проблемы может быть непростым, а все что вы услышите будет звучать как “программа ххх не работает, если я вызываю ее через subprocess”. Поверьте, я такое не раз видел.
Тут вы правы, переменные окружения, порой, могут принести немало сюрпризов. Но, если правильно подойти к их использованию, то проблем можно избежать. Конкретно в этом случае можно сделать вот так:
import os, platform

if os.environ['PROCESSOR_ARCHITEW6432'] and platform.architecture()[0] == "32bit":
print "WOW64"
elif platform.architecture()[0] == "64bit":
print "AMD64"
else:
print "x86"
Точно не ошибетесь :)



Отредактировано (Июль 12, 2010 11:35:16)

Офлайн

#2 Июль 12, 2010 19:49:56

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Автоматическое определение ОС.

Vader
Сорри, я немного ошибся в предыдущем сообщении. Изменили platform.machine, а не platform.architecture. platform.architecture по-прежнему будет возвращать разрядность интерпретатора. Вобщем, изменение вполне оправданное.
да, так - лучше



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version