[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