Как получить выходные данные выполнения каждой зависимой команды, используя Paramiko exec_command - PullRequest
1 голос
/ 01 октября 2019

Я использую Paramiko для выполнения одной или нескольких команд и получения ее вывода.

Поскольку Paramiko не позволяет выполнять несколько команд в одном сеансе канала, я объединяю каждую команду изМой список команд и выполнение его в одной строке, но вывод может быть весь большой выходной текст в зависимости от команд, поэтому трудно определить, какой вывод для каждой команды.

ssh.exec_command("pwd ls- l cd / ls -l")

Я хочу иметьчто-то вроде:

command_output = [('pwd','output_for_pwd'),('ls -l','output_for_ls'), ... ]

для облегчения работы с каждым выводом команды.

Есть ли способ сделать это без изменения библиотеки Paramiko?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Единственное решение (как уже предлагал @Barmar) - вставить уникальный разделитель между отдельными командами. Например:

pwd && echo "end-of-pwd" && cd /foo && echo "end-of-cd" && ls -l && echo "end-of-ls"

И затем найдите уникальную строку в выходных данных.


Хотя, imo, гораздо лучше просто разделить команды на отдельные exec_command вызовы. Хотя я не думаю, что вам нужно часто выполнять несколько команд подряд. Обычно вам нужно только что-то вроде cd или set, и эти команды на самом деле ничего не выводят.

Например:

  1. pwd
  2. ls -la /foo (или cd /foo && ls -la)

По аналогичному вопросу (для канала "shell") см .:
Выполнить несколько зависимых команд индивидуально с Paramiko и найтикогда каждая команда завершает

0 голосов
/ 01 октября 2019

Я использовал это для отправки команд в ssh и telnet, вы можете захватить вывод каждой командой и попробовать.

cmd = ['pwd', 'ls - lrt', 'exit']
cmd_output =[]
for cmd in cmd:
    tn.write(cmd)
    tn.write("\r\n")
    out = tn.read_until('#')
    cmd_output.append((cmd,out))
    print out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...