2014-02-08 2 views
0

Я пытаюсь использовать pexpect для scp-файлов с сервера, но, похоже, ничего не делает (даже сообщение об ошибке). Вот мой код:pexpect: ожидать различные строки

import pexpect 
child=pexpect.spawn('scp -r [email protected]:route/file .') 
child.expect("[email protected]'s password:") 
child.sendline('password') 

Я думаю, что проблема заключается в child.expect команды, потому что «пароль пользователя @ хозяин:» последняя строка некоторых 30 линий приветственного сообщения, которые включают специальный caracters. Есть ли способ сказать pexpect ожидать более одной строки или просто что-нибудь? Или просто ждать X секунд, а затем ввести пароль?

EDIT: Он работает с командой child.wait(), но останавливается в 9-м файле. Бывает, что 10-й очень большой (около 250 Мб), я не знаю, связано ли это с этим ... Спасибо!

EDIT: Я поставил линию

child.logfile=sys.stdout 

после

child=pexpect.spawn('scp -r [email protected]:route/file .') 

и то, что я получаю на экране, а не в файле, это приветственное сообщение, которое заканчивается паролем «пользователь @ хозяина : ", тогда я увидел пароль в той же строке, но я до сих пор не получаю файлы.

Кто-нибудь знает, как это исправить?

Спасибо всем!

+0

«ожидать» будет продолжать сканирование, пока не увидит строку, которую вы ему дали, поэтому код, который вы указали, должен работать. Попробуйте установить 'child.logfile = sys.stdout', чтобы увидеть, что происходит. –

+0

попытайтесь добавить 'child.wait()' в конце, чтобы подождать, пока ребенок закончит. – jfs

ответ

0

Вы можете посмотреть на атрибуте буфер pexpect в'S: - pexpect.before # строке разобранной перед сопоставлением регулярного выражения, указанное в pexpect.expect - pexpect.buffer # строке в настоящее время в буфере - pexpect.after # строке разобранной После совпадения regex, указанное в pexpect.expect

Помните, что child.expect() является блокирующим вызовом и не будет возвращаться до тех пор, пока он не будет соответствовать регулярному выражению или не попадет в исключение EOF/TIMEOUT.

Смежные вопросы