执行交互式工具的命令并使用Paramiko读取其输出

时间:2019-09-16 08:05:57

标签: python ssh stdout paramiko readline

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

我已经在Ubuntu服务器上测试了代码,并且可以正常工作,但是当我在另一台服务器(这是Windows服务器和电信机的接口)上测试代码时,不会读取stdout, (“在远程服务器上成功执行的命令” )已打印,但以下内容(“已读取行” ) 没有打印出来,所以我得出结论,代码挂在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")

1 个答案:

答案 0 :(得分:0)

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

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

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