码迷,mamicode.com
首页 > 其他好文 > 详细

paramiko封装成文件时踩坑

时间:2019-01-18 15:06:18      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:paramik   import   int   命令   auto   param   允许   为什么   shc   

 

今天把paramiko使用封装成一个文件,存储到基本功能模块中遇到一个坑,发现一个规律,为了后面不再踩这个坑,所以赶紧记录下来。

首先我通过网上搜索,获取使用paramiko的基本方法,代码如下

import paramiko

#创建SSH对象
ssh = paramiko.SSHClient()
#允许不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname=‘172.0.0.1‘,port=22,username=‘root‘,password=‘123456‘)
#获取命令结果
stdin,stdout,stderr = ssh.exec_command(‘df -h‘)
print(stdout.read().decode()) #输出结果
print(stderr.read().decode()) #输出错误结果
ssh.close()

经过调试,代码执行ok。

然后对这部分代码进行封装:

首先在公共包中建立文件paramiko.py文件,然后创建类,在类中创建方法,代码如下:

class myParamiko():
#链接远程服务器,执行命令操作
def con_oper_df(self,cnHostname=‘127.0.0.1‘,cnPort=22,cnUsername=‘root‘,cnPassword=‘123456‘):
#创建SSH对象
ssh = paramiko.SSHClient()
#允许不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(cnHostname,cnPort,cnUsername,cnPassword)
stdin,stdout,stderr = ssh.exec_command(‘docker ps -a‘)
print(stdout.read().decode())
print(stderr.read().decode())
ssh.close()

if __name__ == ‘__main__‘:
myP = myParamiko()
myP.con_oper_df(cnHostname=‘172.0.0.1‘,cnPort=22,cnUsername=‘root‘,cnPassword=‘123456‘)

这代码进行调试后,一直提示AttributeError: module ‘paramiko‘ has no attribute ‘SSHClient‘

但是查看paramiko中是有属性SSHClient的,非常奇怪,再回去原来调试代码的文件试试是ok的,然后把上面封装时写的代码拷贝到原来的文件进行调试,发现也是ok的,那么为什么在封装文件里面调试不通过?

后面才发现封装的文件名字paramiko.py和引入的文件名相同,会不会我引入时直接引入自己封装的文件,而没有引入类库的文件呢? 有了猜想就去实践,换个封装文件名字,把内容拷贝进去进行调试,结果是ok的。

然后就发现了一个规律:我们自己封装的文件名称千万不要跟类库中需要引入的模块名称一致,否则问题就出来了。

paramiko封装成文件时踩坑

标签:paramik   import   int   命令   auto   param   允许   为什么   shc   

原文地址:https://www.cnblogs.com/simplezhuo/p/10287429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!