如何将Paramiko exec_commmand作为字符串返回给python客户端[重复]
Posted
技术标签:
【中文标题】如何将Paramiko exec_commmand作为字符串返回给python客户端[重复]【英文标题】:How to return Paramiko exec_commmand as a string to python client [duplicate] 【发布时间】:2018-06-15 14:02:24 【问题描述】:所以我正在整理一些使用 Paramiko 将 ssh 连接到远程服务器并向远程连接发送命令的东西。到目前为止一切进展顺利,除了我似乎无法让 Paramiko 将执行命令的结果作为字符串返回。 Paramiko 正在返回看起来像通道实例及其状态的内容。这就是我现在正在尝试的:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
hostname = 'xxxx'
port = 'xxxxx'
user = 'xxxxx'
password = 'xxxxx'
client.connect(hostname,port,user,password)
do_something(client)
def do_something(client):
object = client.exec_command('pwd')
print(object)
以下是我运行程序时 Paramiko 给我的输出:
(<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 ->
<paramiko.Transport at 0x6119f90 (cipher aes128-ctr, 128 bits) (active; 1
open chanel(s))>>>,
并且期望的输出应该是这样的:
object = client.exec_command('pwd')
print(object)
输出:
'/var/www/html'
基本上,如果您输入命令,我怎样才能让 Paramiko 返回字符串值而不是对象实例?我尝试了几种不同的方法,但我似乎无法解决这个问题!请指教!非常感谢!
【问题讨论】:
【参考方案1】:来自 Paramiko 的 client.exec_command()
文档:
命令的输入和输出流作为 Python 文件类对象返回,表示标准输入、标准输出和标准错误。
因此,您需要获取该标准输出流,并从中读取:
stdin, stdout, stderr = client.exec_command('pwd')
string = stdout.read().decode('ascii').strip("\n")
【讨论】:
非常感谢,这有效。每次我想读取输出时都必须调用 stdin、stdout、stderr 吗?还是我可以简单地设置 stdout = client.exec_command? 当我将它作为 exec_command 参数传递时,您不会知道为什么 dmidecode 不起作用?它说找不到 bash 命令,但是当我在机器上执行时它可以工作 您必须同时阅读stdout
和stderr
。正如我现在在重复问题的答案中所评论的那样:***.com/a/8138442/850848
关于“找不到命令”,见***.com/q/31964108/850848
嗨,马丁,希望你还在,我试着查看了你提到的一些修复,我尝试了一些方法,但没有成功运行诸如“dmidecode、lshw”之类的命令。还有其他建议吗?以上是关于如何将Paramiko exec_commmand作为字符串返回给python客户端[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python SFTP/Paramiko 将 zip 文件从一台服务器传输到另一台服务器
paramiko.SSHClient()的exec_command函数内部如何使用变量
paramiko.SSHClient()的exec_command函数内部如何使用变量
如何在 paramiko 建立的 ssh 连接中将文件传输到 ssh 服务器?