Way to unblock sys.stdin.readline() call

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • joamag

    Way to unblock sys.stdin.readline() call

    HI,

    Is there any possible way to unblock the sys.stdin.readl ine() call
    from a different thread.
    Something like sys.stdin.write () but that would actually work ...
    something to put characters in the stdin...

    Thanks in advance,
    João
  • =?iso-8859-1?q?C=E9dric_Lucantis?=

    #2
    Re: Way to unblock sys.stdin.readl ine() call

    Le Saturday 21 June 2008 15:26:53 joamag, vous avez écrit :
    HI,
    >
    Is there any possible way to unblock the sys.stdin.readl ine() call
    from a different thread.
    Something like sys.stdin.write () but that would actually work ...
    something to put characters in the stdin...
    >
    Do you mean setting stdin in non-blocking mode ? On unix you can do it with
    the fcntl module (you'll find more infos in the libc docs) :

    fcntl.fcntl(sys .stdin, fcntl.F_SETFL, os.O_NONBLOCK)

    and catch IOErrors with errno = EAGAIN. But I don't know how to do it in a
    portable way, suggestions welcome :)

    --
    Cédric Lucantis

    Comment

    • joamag

      #3
      Re: Way to unblock sys.stdin.readl ine() call

      On Jun 21, 4:46 pm, Cédric Lucantis <o...@no-log.orgwrote:
      Le Saturday 21 June 2008 15:26:53 joamag, vous avez écrit :
      >
      HI,
      >
      Is there any possible way to unblock the sys.stdin.readl ine() call
      from a different thread.
      Something like sys.stdin.write () but that would actually work ...
      something to put characters in the stdin...
      >
      Do you mean setting stdin in non-blocking mode ? On unix you can do it with
      the fcntl module (you'll find more infos in the libc docs) :
      >
      fcntl.fcntl(sys .stdin, fcntl.F_SETFL, os.O_NONBLOCK)
      >
      and catch IOErrors with errno = EAGAIN. But I don't know how to do it in a
      portable way, suggestions welcome :)
      >
      --
      Cédric Lucantis
      Thanks for the advice that's a way of solving my problem, but I really
      need a portable way of doing it...

      The application I’m build is meant to be run in more platforms than
      Unix ... so I really need a portable way of doing that or something
      else that unblocks the read call in the stdin

      Comment

      • Terry Reedy

        #4
        Re: Way to unblock sys.stdin.readl ine() call



        joamag wrote:
        Is there any possible way to unblock the sys.stdin.readl ine() call
        from a different thread.
        If you want the thread to do something 'else' when no input is
        available, would this work? Put readline in a thread that puts lines in
        a q=queue.Quese() . Then
        try:
        l=q.ge_nowait
        <process l>
        except queue.Empty
        <whatever without l>

        Comment

        • joamag

          #5
          Re: Way to unblock sys.stdin.readl ine() call

          On Jun 21, 11:34 pm, Terry Reedy <tjre...@udel.e duwrote:
          joamag wrote:
          Is there any possible way to unblock the sys.stdin.readl ine() call
          from a different thread.
          >
          If you want the thread to do something 'else' when no input is
          available, would this work?  Put readline in a thread that puts lines in
          a q=queue.Quese() .  Then
          try:
               l=q.ge_nowait
               <process l>
          except queue.Empty
               <whatever without l>
          Yes, that would work but still I would have a thread that would block
          (the one with the readline call).
          The problem with that solution is that if I try to exit the
          application, while the thread is waiting in the readline call, that
          thread would be blocking the exit of the application.
          That behavior occurs even if the thread is configured in daemon mode.
          Do you think it’s possible to solve the readline blocking problem in
          any other way ?

          Comment

          Working...