如何使用Paramiko exec_command获取每个从属命令执行输出

时间:2019-10-01 06:21:46

标签: python linux shell ssh paramiko

我正在使用Paramiko来执行一个或多个命令并获取其输出。

由于Paramiko不允许在同一个通道会话上执行多个命令,因此我将命令列表中的每个命令连接起来并在一行中执行,但是根据命令的不同,输出可能是一个较大的输出文本,因此很难区分每个命令的输出。

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

我想要类似的东西

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

使每个命令输出都更容易工作。

有没有一种方法可以在不更改Paramiko库的情况下进行操作?

2 个答案:

答案 0 :(得分:1)

唯一的解决方案是(如@Barmar已经建议的)在各个命令之间插入唯一的分隔符。喜欢:

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

然后在输出中查找唯一的字符串。


尽管使用imo,将命令分成单独的exec_command调用要好得多。尽管我并不真正认为您需要经常连续执行多个命令。通常,您只需要cdset之类的东西,这些命令实际上不会输出任何东西。

赞:

  1. pwd
  2. ls -la /foo(或cd /foo && ls -la

有关类似问题(针对“ shell”频道),请参见:
Execute multiple dependent commands individually with Paramiko and find out when each command finishes

答案 1 :(得分:0)

我以前是通过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