How to run PyOS_InputHook from python code (i.e. yield to event loops)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ville M. Vainio

    How to run PyOS_InputHook from python code (i.e. yield to event loops)

    Background: PyOS_InputHook is something that gets run when python is
    doing raw_input. TkInter and friends use it to run their event loops,
    so that their events are handled while python is doing raw_input.

    What I'd like to do is run the same function without having to do
    raw_input. I.e. I'd like to run whatever event loop is available,
    without incorporating any gui-specific code (PyOS_InputHook seems like
    a nifty way to accomplish this).

    My actual use case is to keep a tkinter application responsive while
    launching a background process (and waiting for it to complete!).

    My eventual code would be something like:

    launch_process_ in_thread('bzr pull')

    while not is_done:
    pyos_inputhook( )
    time.sleep(0.1)

    print "Done!"
  • Sean DiZazzo

    #2
    Re: How to run PyOS_InputHook from python code (i.e. yield to eventloops)

    On Sep 6, 1:00 pm, vivai...@gmail. com (Ville M. Vainio) wrote:
    Background: PyOS_InputHook is something that gets run when python is
    doing raw_input. TkInter and friends use it to run their event loops,
    so that their events are handled while python is doing raw_input.
    >
    What I'd like to do is run the same function without having to do
    raw_input. I.e. I'd like to run whatever event loop is available,
    without incorporating any gui-specific code (PyOS_InputHook seems like
    a nifty way to accomplish this).
    >
    My actual use case is to keep a tkinter application responsive while
    launching a background process (and waiting for it to complete!).
    >
    My eventual code would be something like:
    >
    launch_process_ in_thread('bzr pull')
    >
    while not is_done:
      pyos_inputhook( )
      time.sleep(0.1)
    >
    print "Done!"
    I'm still recovering from a hangover, so don't quote me. I think you
    want the "after" function:

    launch_process_ in_thread('bzr pull')
    self.update()

    def update(self):
    while not self.is_done:
    self.after(2000 , self.update)

    Comment

    • ville

      #3
      Re: How to run PyOS_InputHook from python code (i.e. yield to event loops)

      Sean DiZazzo <half.italian@g mail.comwrites:

      >My eventual code would be something like:
      >>
      >launch_process _in_thread('bzr pull')
      >>
      >while not is_done:
      >  pyos_inputhook( )
      >  time.sleep(0.1)
      >>
      >print "Done!"
      >
      I'm still recovering from a hangover, so don't quote me. I think you
      want the "after" function:
      >
      launch_process_ in_thread('bzr pull')
      self.update()
      >
      def update(self):
      while not self.is_done:
      self.after(2000 , self.update)
      That's tk-specific, right? I'm looking for a snippet that

      - Would not be tied to tk

      - Would run sequentially, i.e. the next command would not be entered
      before the process has finished. Just like os.system()




      Comment

      • Fredrik Lundh

        #4
        Re: How to run PyOS_InputHook from python code (i.e. yield to eventloops)

        ville wrote:
        That's tk-specific, right? I'm looking for a snippet that
        >
        - Would not be tied to tk
        upstream, you said:

        "My actual use case is to keep a tkinter application responsive"

        </F>

        Comment

        Working...