vi rimando un messaggio perché non so' esattamente cosa è stato inviato
precedentemente

ciao
m.
--- Begin Message ---
salve, se chiamo raw_input da un thread mentre nel mainthread è in
funzione il mainloop gtk, il codice va' in deadlock. avete idea del
perché? a quanto pare le gtk3 non soffrono dello stesso problema.

attualmente aggiro il problema usando sys.stdin.readline ma raw_input mi
torna utile per avere la readline con pdb (ovvero monkeypatch-o la 
raw_input builtin)

che sia proprio readline che manda in stallo tutto?
vi allego un esempio di codice

ciao
m.
import sys
import cmd
import threading

if len(sys.argv) > 1 and sys.argv[1] == "-3":
    from gi.repository import Gtk as gtk, GObject as gobject
else:
    import gtk
    import gobject

gobject.threads_init()


class Cmd(cmd.Cmd):

    def do_quit(self, arg):
        return True

def start(button, use_rawinput):
    for btn, hid in [(dlbtn, hid1), (inbtn, hid2)]:
        btn.set_label("Close")
        btn.disconnect(hid)
        btn.connect("clicked", gtk.main_quit)
    parser = Cmd()
    if not use_rawinput:
        parser.use_rawinput = False
    t = threading.Thread(target=parser.cmdloop)
    t.daemon = True
    t.start()


win = gtk.Window()
win.connect("destroy", gtk.main_quit)
dlbtn = gtk.Button("raw_input()", use_underline=False)
inbtn = gtk.Button("sys.stdin.readline()")
hid1 = dlbtn.connect("clicked", start, True)
hid2 = inbtn.connect("clicked", start, False)
hbox = gtk.HBox()
hbox.pack_start(dlbtn, True, True, 0)
hbox.pack_start(inbtn, True, True, 0)
win.add(hbox)
win.show_all()
gtk.main()

--- End Message ---
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a