2
import pty
import os
import sys
import time

pid, fd = os.forkpty()

if pid == 0:
    # Slave
    os.execlp("su","su","MYUSERNAME","-c","id")

# Master
print os.read(fd, 1000)
os.write(fd,"MYPASSWORD\n")
time.sleep(1)
print os.read(fd, 1000)
os.waitpid(pid,0)
print "Why have I not seen any output from id?"
4

1 回答 1

5

你睡得太久了。最好的办法是一次一个字节地开始阅读。

#!/usr/bin/env python

import os
import sys

pid, fd = os.forkpty()

if pid == 0:
    # child
    os.execlp("ssh","ssh","hostname","uname")
else:
    # parent
    print os.read(fd, 1000)
    os.write(fd,"password\n")

    c = os.read(fd, 1)
    while c:
        c = os.read(fd, 1)
        sys.stdout.write(c)
于 2009-05-14T19:41:02.023 回答