The pty module, reading from a pty, and Python 2/3
Evan Driscoll
edriscoll at wisc.edu
Tue Oct 23 23:03:31 EDT 2012
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
>
More information about the Python-list
mailing list