【问题标题】:Python Script to SSHPython 脚本到 SSH
【发布时间】:2017-02-23 11:11:13
【问题描述】:

我是一个初学者尝试做SSH编写基本代码,我尝试了一切无法调试,我的代码如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("1")
ssh.connect('196.5.5.6', username='abc', password='abc')
print ("2")
stdin, stdout, stderr = ssh.exec_command('show version')
print ("3")
output= stdout.readlines()
print ("4")
print(output)

我得到的输出是 1
2
3
在 4 它卡在某个地方,存在我无法获取数据的问题,请帮助任何人。代码只是挂在输出步骤。任何地方的解决方案都是完全一样的。

【问题讨论】:

  • 你不应该打印 stdout.readlines() 吗?
  • 值进入输出,然后我打印输出
  • 还是会挂机,试了一下

标签: python shell ssh


【解决方案1】:

您无需在stdin 上执行readlines()。可以直接打印。 readlines() 期望打开一个文件并从文件中读取。而stdinstdoutstderr 不是文件,而是字符串块(或 paramiko 通道中使用的字符串缓冲区)。如果您检查stdinstdoutstderr 的类型,您会发现<class 'paramiko.channel.ChannelFile'> 不完全是文件,而是为存储paramiko 通道中的缓冲区而创建的类似文件的对象。

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print 1
ssh.connect('196.5.5.6', username='abc', password='abc')
print 2
stdin, stdout, stderr = ssh.exec_command('show version')
print 3
output= stdin
print 4
print(output)
print '---', stdout
print '---==', stderr

【讨论】:

  • 是的 Pabitra 我明白了,但这会给你带来这样的结果:
  • 是的,这是 paramiko 通道文件,而不是实际文件。所以,同样的,你不能使用readlines()方法。
  • 那么我应该怎么做,因为即使是 paramiko 也建议做同样的事情。
  • 你试过上面的解决方案了吗?而不是做output= stdout.readlines(),做output= stdout。然后,就我而言,我可以看到输出。检查相同。我想这也应该适用于你。
【解决方案2】:

你应该输入命令试试这个

import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("1")
ssh.connect('ip', username='user', password='pass')
print ("2")
stdin, stdout, stderr = ssh.exec_command('show version')
print ("3")
stdin,stdout,stderr = ssh.exec_command("ls /")
print stdout.readlines()

【讨论】:

  • 感谢您的编辑,不幸的是,只有 stdout.readlines() 有问题! ,它仍然挂起代码
  • 真的吗?生病的屏幕截图我的输出
  • 尝试重新安装python
  • 伙计,我已经全部完成了,它只是不会领先于 readline 评论!
  • 它连接到什么?
猜你喜欢
  • 2021-11-18
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2021-01-10
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多