Найти - Пользователи
Полная версия: Модуль sys и stderr
Начало » Mobile Python » Модуль sys и stderr
1 2
nJLyTo
Не работает такой код:
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
arok
#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()
nJLyTo
=) за скрипт спасибо, как раз для этих целей и начал копать этот модуль

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

1. При запуске через Script Shell ошибка не перехватывается и выводится стандартно, при этом лог-файл не создается.
2. Запоковал скрипт в sis. При запуске программа вылетает после генерации ошибки (но мельком видно красную надпись). Как и положено, log файл создается.
igor.kaist
хм… Я всегда делаю просто sys.stderr=open(FILENAME,'w'), всеработает отлично, что на 1.4.5, что на 1.9.5
gabin
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
arok
Это код модуля debugger, 500% рабочий, ищите ошибку у себя
gabin
Странно, но на эмуляторе аналогичная ошибка . Какая у вас версия pyS60 ? У меня 1.4.5
Какие модуль паки ставили?
igor.kaist
оффтоп:
gabin, ты не офигел ли в подписи ссылку на платный порноресурс ставить?!
Ferroman
Таки офигел. Модеры, обратите внимание, будьте добры.
gabin
Это нарушает правила? Дайте ссылку.
В подписи я поставил директ-линк для выкупа трафика. Я не знаю что у них на ротаторе.
Спасибо за помощь в отладке ошибки. Хотя это тяжелее заметить, чем точку в подписи
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB