standard i/o with os.execl()

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


Quoth Brian Lee <senux at senux.com>:

| 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 (test.py') string does
| not printed through socket, but it printed on terminal which I
| start my test server.
|
| os.execv('test.py', ('', ''))
|
| #!/usr/bin/env python
| # test.py 
| print 'hello world (test.py)'
|
| 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('test.py', ('test.py',))

	Donn Cave, donn at drizzle.com



More information about the Python-list mailing list