我正在使用Paramiko来执行单个或多个命令并获取其输出。
由于 Paramiko 不允许在同一通道会话上执行多个命令,因此我将命令列表中的每个命令连接起来并在一行中执行,但输出可能是整个大输出文本,具体取决于命令,因此很难区分每个命令的输出。
ssh.exec_command("pwd ls- l cd / ls -l")
我想要这样的东西:
command_output = [('pwd','output_for_pwd'),('ls -l','output_for_ls'), ... ]
以便更轻松地处理每个命令输出。
有没有办法在不更改帕拉米科库的情况下做到这一点?
唯一的解决方案是(如@Barmar已经建议的那样(在各个命令之间插入唯一的分隔符。喜欢:
pwd && echo "end-of-pwd" && cd /foo && echo "end-of-cd" && ls -l && echo "end-of-ls"
然后在输出中查找唯一的字符串。
虽然是 imo,但最好只是将命令分成单独的exec_command
调用。虽然我真的不认为你需要经常连续执行多个命令。通常你只需要类似的东西,cd
或set
,这些命令并没有真正输出任何东西。
喜欢:
pwd
ls -la /foo
(或cd /foo && ls -la
(
有关类似问题,请参阅:
- 使用 Paramiko 单独执行多个相关命令,并找出每个命令何时完成(对于"shell"通道(
- 使用Paramiko结合交互式外壳和recv_exit_status方法
我曾经这样做是为了在 ssh 和 telnet 中发送命令,您可以使用每个命令捕获输出并尝试。
cmd = ['pwd', 'ls - lrt', 'exit']
cmd_output =[]
for cmd in cmd:
tn.write(cmd)
tn.write("rn")
out = tn.read_until('#')
cmd_output.append((cmd,out))
print out