Re: The pty module, reading from a pty, and Python 2/3

Discussion in 'Python' started by David Hutto, Oct 24, 2012.

  1. David Hutto

    David Hutto Guest

    On Tue, Oct 23, 2012 at 11:41 PM, Evan Driscoll <> wrote:
    > OK, one more self-reply. :)
    >
    > I found http://bugs.python.org/issue5380 which seems to be relevant. Sounds
    > like the OS is returning an error, and that's naturally being propagated
    > through Python. And further testing reveals the problem only surfaces when
    > the child actually exits -- if the child writes data to the pipe and is more
    > enthusiastic about living, then the parent can read it successfully. While
    > it'd be nice if my example worked, for my actual purpose I think that's good
    > enough (I just won't be able to test *quite* as easily for a while).
    >
    > I am still curious if anyone know why it worked in 2 though.
    >
    > Evan
    >
    >
    >
    >
    > On 10/23/2012 10:03 PM, Evan Driscoll wrote:
    >>
    >> Oh, and a little more information:
    >>
    >> The log.txt file I create has the message that it's "about to execlp", and
    >> the exec() *does* actually happen -- the IOError is raised after the child
    >> process quits.
    >>
    >> Evan
    >>
    >>
    >>
    >> On 10/23/2012 09:59 PM, Evan Driscoll wrote:
    >>>
    >>> I have the following program. Everything is sunshine and rainbows when I
    >>> run in in Python 2, but when I run it under Python 3 I get an IOError. 2to3
    >>> only reports one dumb suggestion re. a print call (which I can get rid of by
    >>> importing __future__'s print_function, and then it just suggests removing
    >>> that import).
    >>>
    >>> Can anyone shed any light? I am on Ubuntu Linux with Python 2.7.3 and
    >>> 3.2.3.
    >>>
    >>>
    >>> (Just for the record, I figured out that it ran under Python 2 by
    >>> accident as I was reducing it for a "why doesn't this run?" email. :) I'm
    >>> not super-familiar with Py3 as I've mostly only worked with 2.)
    >>>
    >>> I'm not 100% sure how this will come through, so I've also put it at
    >>> http://pastebin.com/60wjXSF3.
    >>>
    >>> Evan
    >>>
    >>>
    >>> import sys
    >>> import pty
    >>> import os
    >>>
    >>> def get_text(filename):
    >>> try:
    >>> ( child_pid, fd ) = pty.fork() # OK
    >>> except OSError as e:
    >>> print(str(e))
    >>> sys.exit(1)
    >>>
    >>> if child_pid == 0:
    >>> try:
    >>> with open("log.txt", "w") as f:
    >>> f.write("about to execlp")
    >>> os.execlp("cat", "cat", filename)
    >>> except:
    >>> with open("log.txt", "w") as f:
    >>> f.write("could not spawn process")
    >>> print("Could not spawn")
    >>> sys.exit(1)
    >>>
    >>> child_pty = os.fdopen(fd)
    >>> return child_pty.read()
    >>>
    >>>
    >>> if __name__ == "__main__":
    >>> print(get_text("my-pty-test.py"))
    >>>
    >>>
    >>> The read error I get is
    >>>
    >>> Traceback (most recent call last):
    >>> File "my-pty-test.py", line 28, in <module>
    >>> print(get_text("my-pty-test.py"))
    >>> File "my-pty-test.py", line 24, in get_text
    >>> return child_pty.read()
    >>> IOError: [Errno 5] Input/output error


    at first glance, you have the file open for writing('w'), not
    reading('r'), but may not be that.

    I'll check if I get a few minutes.



    --
    Best Regards,
    David Hutto
    CEO: http://www.hitwebdevelopment.com
    David Hutto, Oct 24, 2012
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Evan Driscoll
    Replies:
    0
    Views:
    212
    Evan Driscoll
    Oct 24, 2012
  2. Evan Driscoll
    Replies:
    0
    Views:
    165
    Evan Driscoll
    Oct 24, 2012
  3. Evan Driscoll
    Replies:
    0
    Views:
    190
    Evan Driscoll
    Oct 24, 2012
  4. David Hutto
    Replies:
    0
    Views:
    183
    David Hutto
    Oct 24, 2012
  5. David Hutto
    Replies:
    0
    Views:
    131
    David Hutto
    Oct 24, 2012
Loading...

Share This Page