Я пытаюсь использовать expect
для автоматизации задачи как части более крупной программы python, и у меня возникли проблемы с отправкой команды ssh на удаленную машину. Я еще не использовал expect
и не успел найти решение на странице руководства.Использование ожидать получить от ssh
Мне нужно использовать функцию автоматизации некоторых взаимодействий, прежде чем выполнить эту команду, но я удалил их здесь, чтобы упростить вопрос.
Ниже приведен упрощенный пример программы:
import subprocess
expect = """
/usr/bin/expect <<EOF
spawn ssh some_machine ls
expect eof
puts "$expect_out(buffer)"
"""
output = subprocess.check_output(expect, shell=True)
print(output)
Выход:
b'spawn ssh some_machine ls\r\n116029\r\nArchive\r\n\r\n(buffer)\n'
По-видимому, содержит команду икру, а также «(буфер)» в конце. Я не уверен, почему это происходит. Я пытаюсь получить результаты только ls
.
Если я включу режим отладки в ожидании, я вижу, что expect_out(buffer)
настроен на то, что я хотел бы вернуть, но puts
не отражает это.
Выход:
expect version 5.45
argv[0] = /usr/bin/expect argv[1] = -d
set argc 0
set argv0 "/usr/bin/expect"
set argv ""
executing commands from command file
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {1753}
expect: read eof
expect: set expect_out(spawn_id) "exp7"
expect: set expect_out(buffer) "116029\r\nArchive\r\n"
<wrong output as above>
Почему вы используете 'expect' здесь? Вы просто запускаете команду и читаете ее стандартный вывод. Вы можете просто запустить 'subprocess.check_output ('ssh some_machine ls', shell = True)'. – larsks
Я упростил сценарий для примера, но мне нужно использовать его для автоматизации некоторого взаимодействия, прежде чем я смогу собрать результат. – Matteo
Кроме того, в вашем сценарии оболочки 'ожидать' отсутствует терминал' EOF' для соответствия '<< EOF'. – larsks