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
--
http://mail.python.org/mailman/listinfo/python-list