Я пытаюсь использовать 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 .')
и то, что я получаю на экране, а не в файле, это приветственное сообщение, которое заканчивается паролем «пользователь @ хозяина : ", тогда я увидел пароль в той же строке, но я до сих пор не получаю файлы.
Кто-нибудь знает, как это исправить?
Спасибо всем!
«ожидать» будет продолжать сканирование, пока не увидит строку, которую вы ему дали, поэтому код, который вы указали, должен работать. Попробуйте установить 'child.logfile = sys.stdout', чтобы увидеть, что происходит. –
попытайтесь добавить 'child.wait()' в конце, чтобы подождать, пока ребенок закончит. – jfs