[python] execfile
Jakub Vojáček
Jakohv na seznam.cz
Neděle Září 10 12:18:16 CEST 2006
Ahoj
Mám takovej problém, dělám naprogramu, přes kterej bych mohl pouštět ostatní pythonovský programy. Když by měl nějaký program chybu, tak by se ptevřelo okno spopisem chyby...
zatím mám tadyto:
# -*- coding: utf-8 -*-
from Tkinter import*
import cStringIO,traceback
okno=Tk()
okno.title('Please help!')
text=Text()
text.pack()
def beg():
run()
text.insert(END,cout.getvalue())
def run():
global cout
cout = cStringIO.StringIO()
sys.stderr=cout
sys.stdout=cout
try:
print prosim_pomoc
return (traceback.print_exc())
except:
return (traceback.print_exc())
Button(text="Ok",command=beg).pack()
mainloop()
To funguje, ale místo print .. tam dám execfile tak narazím na problém. Když je v to programu kterej pouštím přes execfile() chyba tak mi ji to zobrazí, ale když je ta chyba pozdějc, navazujicí na nějakou událost tak už to nezobrazí. Tady je příklad toho co nefunguje:
from Tkinter import*
okno=Tk()
def press():
print omg
Button(text="press me!",command=press).pack()
mainloop()
normalně se otevře okno s tim tlacitkem ale když pak to tlačitko zmačknu, tak se nic nestane, ale měla by se objevit v text() hláška:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:/Documents and Settings/Blu/Plocha/Creator/blujacker.py", line 4, in press
print omg
NameError: global name 'omg' is not defined
Tipuju že budu potřebovat nějaký server. Místo sys.stdout=cout bych měl dát něco jako sys.stdout = objekt. Ten objekt by měl definici
def write(self,co):
self.dataSocket.send(co)
a pak by ten program měl puštěnej server a to co přijde vkládal do Textu() ale nepodařilo se mi to zprovoznit:(
děkuju
Blujacker
Další informace o konferenci Python