Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 13, 2009 18:36:29

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

Не работает такой код:

import appuifw, sys

class Sock:
def write(self, text):
appuifw.query(u'Ok', 'query')

sys.stderr = Sock()

raise SyntaxError, u'some error'
Документацию читал, нашел такие примеры:
import sys 

fsock = open('error.log', 'w')
sys.stderr = fsock
raise Exception, 'this error will be logged'
Они тоже отказываются работать, в чем может быть причина?
Python 1.4.5 3rd



Офлайн

#2 Июнь 13, 2009 19:38:57

arok
От:
Зарегистрирован: 2008-01-15
Сообщения: 145
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

#Autors:_ALBERT_,arok
# mod by atrant
# version 1.1
import os,sys,appuifw,e32,sysinfo
from urllib import urlopen,urlencode
ru=lambda text:text.decode('utf-8')
sys.setdefaultencoding('utf-8')
mail,nick,comment,menu=None,None,None,[]
logfile = u"d:\\" + os.path.basename(appuifw.app.full_name()) + u"_log.txt"
def send(to,ext,k):
fro=appuifw.query(ru('Введите ваш %s для ответа'%k),'text')
if fro:
appuifw.app.body.color=0x000000
appuifw.app.body.add(ru('Подождите...\n'))
param={'to':to,'body':(appuifw.app.body.get()[86:-14]).encode('utf-8'),'name':fro,'model':sysinfo.sw_version().split(u' ')[-2],'comment':comment}
out=urlopen(u'http://arok.org.ru/cgi-bin/send.'+ext,urlencode(param)).read()
appuifw.app.body.add(unicode(out)+'\n')
else:pass
class Error:
flag=0
def write(self,text):
if self.flag:
file=open(logfile,'a+')
file.write(text)
file.close()
appuifw.app.body.add(ru(text))
else:
if mail:menu.append((ru("Отправить на email"),lambda:send(mail,'php','email')))
if nick:menu.append((ru("Отправить в ЛС"),lambda:send(nick,'py','nick')))
appuifw.app.exit_key_handler=os.abort
appuifw.app.menu=menu
appuifw.app.body=appuifw.Text(ru(" В программе произошла ошибка. Пожалуйста отошлите данный текст разработчикам.\n"))
f=open(logfile,'w')
f.close()
appuifw.app.body.color=0xff0000
self.flag=1
if appuifw.app.full_name().lower().find(u"python")==-1:
sys.stderr=Error()



Офлайн

#3 Июнь 13, 2009 20:37:59

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

=) за скрипт спасибо, как раз для этих целей и начал копать этот модуль

В скрипте изменил путь для лог-файла, а так же в конце вставил строку с генерацией ошибки (raise Exception, ‘this error will be logged’). И вот результаты тестирования:

1. При запуске через Script Shell ошибка не перехватывается и выводится стандартно, при этом лог-файл не создается.
2. Запоковал скрипт в sis. При запуске программа вылетает после генерации ошибки (но мельком видно красную надпись). Как и положено, log файл создается.



Отредактировано (Июнь 13, 2009 22:56:44)

Офлайн

#4 Июнь 14, 2009 10:36:53

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Модуль sys и stderr

хм… Я всегда делаю просто sys.stderr=open(FILENAME,'w'), всеработает отлично, что на 1.4.5, что на 1.9.5



Офлайн

#5 Июнь 19, 2009 12:45:05

gabin
От:
Зарегистрирован: 2009-03-07
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

arok, у меня такой результат выполнения скрипта:

Traceback (most recent call last):
File "C:\private\2000b1a5\default.py", line 81, in menu_action
f()
File "C:\private\2000b1a5\default.py", line 65, in query_and_exec
execfile(script_list[index][1].encode('utf-8'), script_namespace.namespace)
File "c:\python\exception.py", line 1



Отредактировано (Июнь 19, 2009 12:45:58)

Офлайн

#6 Июнь 19, 2009 14:41:08

arok
От:
Зарегистрирован: 2008-01-15
Сообщения: 145
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

Это код модуля debugger, 500% рабочий, ищите ошибку у себя



Офлайн

#7 Июнь 20, 2009 13:18:49

gabin
От:
Зарегистрирован: 2009-03-07
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

Странно, но на эмуляторе аналогичная ошибка . Какая у вас версия pyS60 ? У меня 1.4.5
Какие модуль паки ставили?



Офлайн

#8 Июнь 20, 2009 14:11:04

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Модуль sys и stderr

оффтоп:
gabin, ты не офигел ли в подписи ссылку на платный порноресурс ставить?!



Офлайн

#9 Июнь 20, 2009 19:29:04

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Модуль sys и stderr

Таки офигел. Модеры, обратите внимание, будьте добры.

Офлайн

#10 Июнь 20, 2009 20:19:47

gabin
От:
Зарегистрирован: 2009-03-07
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль sys и stderr

Это нарушает правила? Дайте ссылку.
В подписи я поставил директ-линк для выкупа трафика. Я не знаю что у них на ротаторе.
Спасибо за помощь в отладке ошибки. Хотя это тяжелее заметить, чем точку в подписи



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version