paramiko封装成文件时踩坑
Posted simplezhuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paramiko封装成文件时踩坑相关的知识,希望对你有一定的参考价值。
今天把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封装成文件时踩坑的主要内容,如果未能解决你的问题,请参考以下文章