2009-05-14 3 views
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?" 

Antwort

5

Sie schlafen zu lange. Am besten beginnen Sie mit dem Lesen, sobald Sie ein Byte gleichzeitig lesen können.

#!/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) 
Verwandte Themen