Форум сайта python.su
здравствуйте. с недавних пор разбираюсь, усиленно, с python, ковыряясь в любом коде который попадется на глаза. Недавно устанавливал crunchbang linux на Asus Eee PC 1005HA, по этому мануалу
http://crunchbanglinux.org/forums/topic/3954/asus-eee-pc-1005ha-crunchbang-installation-guide/
и конечно заглянул в код eee-control_0.9.4. Он написан на смеси bash и python. В модуле eee-control-daemon (устанавливается в /usr/bin) обнаружил код:
# Initialize loggerНо в модуле __builtin__ нет ничего подобного
def _log(text, level=3, module=None):
if __builtin__._loglevel >= level:
if module: print “%s: %s” %(module, text)
else: print text
__builtin__.log = _log
Офлайн
Это хак, и довольно грязный. Дело в том, что Питон ищет все имена в таком порядке: namespaces globals, locals, builtins.
Причем если globals и locals у каждого свои - то builtin на всех один общий. Значит в него можно что-то положить - и потом это имя будет видно всем (если его не перекроют, конечно же).
Автор вашего творения от большого ума, совмещенного с великой ленью (положить log в отдельный модуль было бы более логично - но модуль пришлось бы импортировать явно перед использованием) решил, что модификация этого buildin namespace - удачная идея. Что в корне не верно по целому ряду причин. Никогда в своем коде так не делайте.
В стандратном питоне, естественно, никакого log нет.
Офлайн
значит в этот кусок кода не работает? Но само то приложение то пашет, оно не должно вылетать с ошибкой? Ведь запускается и сидит в top как раз eee-control-daemon
Офлайн
saturn721Отдельно нет.
значит в этот кусок кода не работает?
Отредактировано (Янв. 20, 2010 13:47:20)
Офлайн
А если подобный код присутствует в определении класса. Т.е. уже в tray.py в class EeeControlTray: определяется некая функция
def toggle_touchpad(self):и я тоже не пойму откуда взялось имя iface
# If we're using synaptics, switch it via synclient
if self.use_synaptics:
if self.synaptics_state == True:
os.system(“synclient TouchpadOff=1”)
self.synaptics_state = False
else:
os.system(“synclient TouchpadOff=0”)
self.synaptics_state = True
self.touchpad_notify(self.synaptics_state)
else:
if self.iface.get_touchpad(): self.iface.touchpad_off()
else: self.iface.touchpad_on()
Офлайн