执行交互式工具的命令并使用 Paramiko 读取它们的输出
Executing commands of interactive tool and reading their output with Paramiko
我正在准备一个代码来使用带有 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")
您正在执行的命令是交互式的。启动时,它等待子命令。当您执行它并等待命令完成时(通过调用 readlines
)。永远不会发生的事情。
您必须将子命令提供给您的命令才能让它执行某些操作。
参见 。
您还必须让命令退出(通过发送像 exit
/quit
/bye
这样的子命令)。
我正在准备一个代码来使用带有 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")
您正在执行的命令是交互式的。启动时,它等待子命令。当您执行它并等待命令完成时(通过调用 readlines
)。永远不会发生的事情。
您必须将子命令提供给您的命令才能让它执行某些操作。
参见
您还必须让命令退出(通过发送像 exit
/quit
/bye
这样的子命令)。