Найти - Пользователи
Полная версия: Как отловить NOTICE при работе скрипта?
Начало » Python для новичков » Как отловить NOTICE при работе скрипта?
1
sheva
Есть скрипт, который конвертирует 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)

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

Большое спасибо
igor.kaist
Это вываливается в stdout. Перенаправьте его куда вам нужно
import sys
class Out:
def __init__(self):pass
def write(self,data):
# делаем что нибудь с data

sys.stdout=Out()
print 'test'
sheva
Я нашел такой код:

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, может поэтому не получается их споймать?
sheva
Попробовал сделать тоже самое для 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 не попадают
igor.kaist
Посмотрите, в исходники, как вызывается ваша утилита? Возможно из subprocess не перенаправляется stdout и stderr и сообщения вываливаются в терминал в обход питона
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