In article <[EMAIL PROTECTED]>, Jo Schambach <[EMAIL PROTECTED]> wrote: >I am trying to write a GUI with tkinter that displays the stdout from a >regular C/C++ program in a text widget. >The idea i was trying to use was as follows: > >1) use "popen" to execute the C/C++ program >2) then use "tkinter.createfilehandler" to create a callback that would >be called when the C/C++ program creates output on stdout. > >Somehow, I can't get this to work. here is what I have tried so far: > >import sys,os >from Tkinter import * > >root = Tk() >mainFrame = Frame(root) >textBox = Text(mainFrame) >textBox.pack(fill=BOTH, expand=YES) >mainFrame.pack(fill=BOTH, expand=YES) > >fh = os.popen('/homes/jschamba/tof/pcan/pcanloop') > >def readfh(filehandle, stateMask): > global textBox > newText = filehandle.read() > textBox.insert(END, newText) > >tkinter.createfilehandler(fh, tkinter.READABLE, readfh) >root.mainloop()
Changingfilehandle.read() to filehandle.readline() and running a separate output generator, this seems to work, although the Text widget fills rapidly: ========= test generator - creates a pipe and writes the time once/second #!/usr/local/bin/python import os, time try: pipe = os.mkfifo('./pipe', 0660) except OSError, (errno): if errno == 17: pass fh = open('./pipe', 'w') rh = open('./pipe', 'r') # keep the pipe having a reader while True: fh.write("%s\n" % time.asctime(time.localtime())) fh.flush() time.sleep(1) ========== read the output and put in a Text widget: #!/usr/bin/python import sys,os from Tkinter import * root = Tk() mainFrame = Frame(root) textBox = Text(mainFrame) textBox.pack(fill=BOTH, expand=YES) mainFrame.pack(fill=BOTH, expand=YES) fh = os.popen('/bin/cat /tmp/pipe', 'r', 1) def readfh(filehandle, stateMask): global textBox newText = filehandle.readline() textBox.insert(END, newText) tkinter.createfilehandler(fh, tkinter.READABLE, readfh) root.mainloop() -- Jim Segrave ([EMAIL PROTECTED]) -- http://mail.python.org/mailman/listinfo/python-list