У меня есть следующий код (обновлен для включения pexpect):
import sys
import subprocess
import pexpect
print "0"
ssh = subprocess.Popen("ssh -A -t [email protected] ssh -A -X [email protected]",
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE).communicate()
print "1"
child = pexpect.spawn(ssh)
print "2"
child.expect ('password')
print "3"
child.sendline ('password2')
print "4"
result = ssh.stdout.readlines()
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
print result
Когда я запускаю его, я вижу напечатанный ноль, за которым следует запрос пароля, отображаемый на экране. Строка, которая печатает One, никогда не выполняется, поэтому следующий код pexpect тоже не выполняется. Я могу ввести пароль как пользователь, но затем он зависает. Когда я убиваю его с помощью Ctrl + C, перед возвратом в командную строку появляется 2-й баннер входа в систему с приглашением 2-го пароля. Может кто-нибудь объяснить, как захватить приглашение 1-го пароля, чтобы программа могла отправлять пароль вместо пользователя? Кроме того, может кто-нибудь объяснить, почему я не получаю результирующую переменную, пока не убью программу?