Как уже говорилось, лучше использовать открытые ключи.Поскольку я использую их как обычно, я изменил вашу программу, чтобы она работала здесь.
#!/usr/bin/python2.6
import os,sys,time,thread
pid,fd = os.forkpty()
if pid == 0:
os.execv('/usr/bin/ssh',['/usr/bin/ssh','localhost',])
sys.exit(0)
else:
output = os.read(fd,1024)
print output
os.write(fd,'ls\n')
time.sleep(1) # this is new!
output = os.read(fd,1024)
print output
С добавленным sleep(1)
я даю удаленный хост (или, в моем случае, не очень удаленный)host) время для обработки команды ls
и выдачи ее результата.
Если вы отправите ls
и сразу прочитаете, вы только прочитаете то, что присутствует в данный момент.Может быть, вы должны прочитать в цикле или около того.
Или вы просто должны сделать это следующим образом:
import subprocess
sp = subprocess.Popen(("ssh", "localhost", "ls"), stdout=subprocess.PIPE)
print sp.stdout.read()