【问题标题】:Executing commands of interactive tool and reading their output with Paramiko使用 Paramiko 执行交互式工具的命令并读取其输出
【发布时间】:2020-01-17 01:06:03
【问题描述】:

我正在准备一个代码,以使用带有 Paramiko 的 ssh 访问远程服务器,并运行一些命令并查看 stdout 的输出。

我已经用 Ubuntu 服务器测试了代码,它运行良好,但是当我用不同的服务器(Windows 服务器和电信机器的接口)测试代码时,没有读取标准输出, ("Successfully executed command on remote server") 被打印,但以下 ("lines are read") 没有打印所以我断定代码挂在stdout=stdout.readlines() 代码复制在下面,请你帮我弄清楚这个失败背后的原因是什么?

我还想补充一点,如果我使用 PuTTY 在该服务器上执行命令,我会得到正确的输出。

import paramiko
import os
user_name = "****"
passwd = "******"
ip = "*.*.*.*"

print ("Please wait creating ssh client ...")
ssh_client = paramiko.SSHClient()     #Create sshclient instance
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("Please wait, connecting to remote server")
ssh_client.connect(hostname=ip,username=user_name,password=passwd)
cmd="mml \n command2"
print ("Please wait, executing command on remote server")
stdin,stdout,stderr=ssh_client.exec_command(cmd)
print ("Successfully executed command on remote server")
stdout=stdout.readlines()
print ("lines are read")
stdout="".join(stdout)
ssh_client.close()
print ("Connection closed")
print (stdout)
os.system("pause")

【问题讨论】:

  • 你确定没有抛出异常吗? + 您是否遇到任何命令或某些特定命令的问题? + 那是什么服务器?
  • 您好,是的,没有任何输出就挂起也不例外。这是一个windows服务器通过内部协议与另一台电信机器通信,登录后第一个命令是mml,(用于人机语言),然后我可以为这个电信提供商键入一些特定的命令。

标签: python ssh stdout paramiko readline


【解决方案1】:

您正在执行的命令是交互式的。启动时,它等待子命令。当您执行它并等待命令完成时(通过调用readlines)。永远不会发生的事情。

您必须将子命令提供给您的命令以使其执行某些操作。
见Pass input/variables to command/script over SSH using Python Paramiko。

您还必须退出命令(通过发送子命令,如exit/quit/bye)。

【讨论】:

  • 感谢您的反馈,我是否必须在 write.stdin 中添加子命令:我在 stdout 之前添加了以下几行:stdin.write("subcommand") 和 stdin.flush() .stdout.readlines(),但还是一样的结果,我觉得我必须阅读更多关于使用 paramiko 但我不知道我需要搜索的确切部分。
  • 1) 您错过了换行符+ '\n'。 2) 在调用readlines 之前,您已经告诉您的命令 (mml) 关闭。通常通过发送"exit\n" 或"bye\n" 或"quit\n"。
  • 现在 stdout.readlines 被执行,即使它给出空输出 [] 但我想这是另一个问题,我相信是由于第二个 ssh_client.exec_command("exit;" ) 删除 mml 命令的输出。
  • 我在上面的问题中添加了修改后的代码
  • 您必须将exit 发送到mml,与发送command1 的方式相同。
猜你喜欢
  • 2015-07-06
  • 2010-09-27
  • 1970-01-01
  • 2013-06-12
  • 2018-11-28
  • 2016-03-16
  • 1970-01-01
相关资源
最近更新 更多