Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2011 00:20:58

sheva
От:
Зарегистрирован: 2011-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отловить NOTICE при работе скрипта?

Есть скрипт, который конвертирует pdf файлы в swf. Вот основной кусок

            swf = gfx.SWF()
swf.setparameter("flashversion", "9");
for pagenr in xrange(1,doc.pages+1):
page = doc.getPage(pagenr)
swf.startpage(page.width, page.height)
page.render(swf)
swf.endpage()
writeStatus(status, "Error: " + str(sys.exc_info()[0]) + ":" + str(sys.exc_info()[1]))
writeStatus(status, "Progress: %d/%d" % (pagenr, doc.pages))
swf.save(dir + "/" + "doc_temp.swf")
Во время работы скрипта вылазят сообщения, типа

NOTICE processing PDF page 4 (816x1056:0:0) (move:0:0)
NOTICE processing PDF page 5 (816x1056:0:0) (move:0:0)

Мне нужно как-то до них добраться и в зависимости от того, что там выводится - плясать дальше. В Питоне я совсем новичек, подскажите, как мы выловить эти сообщения?

Большое спасибо



Офлайн

#2 Янв. 24, 2011 11:06:23

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

Как отловить NOTICE при работе скрипта?

Это вываливается в stdout. Перенаправьте его куда вам нужно

import sys
class Out:
def __init__(self):pass
def write(self,data):
# делаем что нибудь с data

sys.stdout=Out()
print 'test'



Офлайн

#3 Янв. 24, 2011 13:45:44

sheva
От:
Зарегистрирован: 2011-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отловить NOTICE при работе скрипта?

Я нашел такой код:

print 'Dive in'
saveout = sys.stdout
fsock = open('out.log', 'w')
sys.stdout = fsock
print 'This message will be logged instead of displayed'
sys.stdout = saveout
fsock.close()
сделал так:
            saveout = sys.stdout
fsock = open(dir + "/" + 'out.log', 'w')
sys.stdout = fsock
print 'This message will be logged instead of displayed'
swf = gfx.SWF()
swf.setparameter("flashversion", "9");
for pagenr in xrange(1,doc.pages+1):
page = doc.getPage(pagenr)
swf.startpage(page.width, page.height)
page.render(swf)
swf.endpage()
swf.save(dir + "/" + "doc_temp.swf")
os.rename(dir + "/" + "doc_temp.swf",dir + "/" + "doc.swf")
sys.stdout = saveout
fsock.close()
На экран выводятся ошибки, а в файл out.log попадает только ‘This message will be logged instead of displayed’ ((
Эти ошибки выводятся утилитой sfwtools, может поэтому не получается их споймать?



Офлайн

#4 Янв. 24, 2011 14:19:43

sheva
От:
Зарегистрирован: 2011-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отловить NOTICE при работе скрипта?

Попробовал сделать тоже самое для stderr :

            fsock = open(dir + "/" + 'error.log', 'w')
sys.stderr = fsock
raise Exception, 'this error will be logged'
swf = gfx.SWF()
swf.setparameter("flashversion", "9");
for pagenr in xrange(1,doc.pages+1):
page = doc.getPage(pagenr)
swf.startpage(page.width, page.height)
page.render(swf)
swf.endpage()
swf.save(dir + "/" + "doc_temp.swf")
os.rename(dir + "/" + "doc_temp.swf",dir + "/" + "doc.swf")
Ошибки на экран не выводятся, но и в файл error.log не попадают



Отредактировано (Янв. 24, 2011 14:20:02)

Офлайн

#5 Янв. 24, 2011 17:43:18

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

Как отловить NOTICE при работе скрипта?

Посмотрите, в исходники, как вызывается ваша утилита? Возможно из subprocess не перенаправляется stdout и stderr и сообщения вываливаются в терминал в обход питона



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version