zoukankan      html  css  js  c++  java
  • 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的。

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

    
    
  • 相关阅读:
    机器学习中的特征缩放(feature scaling)
    vs未能正确加载XXX包,编译时停止工作问题
    Python基础-画图:matplotlib
    深度学习基本知识
    TensorFlow入门:线性回归
    SQLserver中取众位数的写法
    python pip安装报错: ConnectTimeoutError
    TensorFlow安装-Windows
    Python读文件报错:SyntaxError: Non-ASCII character in file
    java 项目连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/simplezhuo/p/10287429.html
Copyright © 2011-2022 走看看