standard i/o with os.execl()

Donn Cave donn at
Wed Aug 28 09:43:46 CEST 2002

Quoth Brian Lee <senux at>:

| I linked standard input/output to a socket by these lines.
| sys.stdin  = conn.makefile('rb', -1)
| sys.stdout = conn.makefile('wb',  0)
| sys.stderr = sys.stdout
| print 'hello world'
| And it works: When I connect to my test server, I got 'hello
| world' string immediately. 
| But when I use follow line, 'hello world (') string does
| not printed through socket, but it printed on terminal which I
| start my test server.
| os.execv('', ('', ''))
| #!/usr/bin/env python
| # 
| print 'hello world ('
| How can I fully link standard input/output to socket even in
| os.exec*() functions? Any advice?

I gather you have some kind of UNIX platform.  In this case, you
can use os.dup2, with the socket as a file descriptor.  That's
the same thing but at a much lower level - dup2 is an ioctl -
where you're working with the things that processes inherit.
I think your example in these terms would be something like

  fd = conn.fileno()
  os.dup2(fd, 0)
  os.dup2(fd, 1)
  print 'Hello, world'
  os.execv('', ('',))

	Donn Cave, donn at

More information about the Python-list mailing list