如何使用Paramiko获取每个依赖的命令执行输出exec_command

How to get each dependent command execution output using Paramiko exec_command

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

由于 Paramiko 不允许在同一个通道会话中执行多个命令,我将命令列表中的每个命令连接起来并在一行中执行,但输出可以是一个完整的大输出文本,具体取决于命令,因此很难区分每个命令的输出。

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

我想要这样的东西:

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

更轻松地处理每个命令输出。

有没有不改Paramiko库的方法?

我曾经这样做是为了在 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

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

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

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


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

喜欢:

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

类似问题请见:

  • (对于“shell”频道)