При входе в систему отображается баннер входа (несколько строк), а затем отображается пользовательская оболочка, в которой можно запускать только заранее заданные команды. предоставлено производителем.
Как лучше всего подключиться к этому устройству из сценария Python, запустить команды и получить выходные данные команды?
Использование Модуль Fabric: создание объекта соединения и последующий вызов Connection.run, похоже, представляет собой только интерактивную оболочку. Ниже приведен пример кода:
Код: Выделить всё
from fabric import Connection
from invoke.exceptions import UnexpectedExit
from invoke.watchers import Responder
def run_network_command(host, username, password, command):
try:
conn = Connection(host=host, user=username, connect_kwargs={
"password": password,
},
)
# Create responder for the custom shell prompt
prompt_pattern = r"\[net-7\.2\] \w+>"
shell_responder = Responder(
pattern=prompt_pattern,
response=f"{command}\n"
)
# Run command in the custom shell
result = conn.run(
command,
pty=True,
watchers=[shell_responder]
)
return result.stdout
except UnexpectedExit as e:
return f"Error executing command: {str(e)}"
except Exception as e:
return f"Connection error: {str(e)}"
finally:
try:
conn.close()
except:
pass
# Example usage
if __name__ == "__main__":
# Connection details
host = "192.168.1.1"
username = "root"
password = "pass"
command = "show version"
# Run command and print output
output = run_network_command(host, username, password, command)
print(output)
Подробнее здесь: https://stackoverflow.com/questions/791 ... un-command