• 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的。

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

    
    
  • 相关阅读:
    随机产生16进制颜色值
    关于单元测试的思考--Asp.Net Core单元测试最佳实践
    使用xUnit为.net core程序进行单元测试
    SQLSERVER——查看阻塞信息(sp_who_lock优化无误版)
    SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
    .netcore 写日志(使用NLog,log4net)
    概率与影响矩阵
    WebApi Helper帮助文档 swagger
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    解决哈希(HASH)冲突的主要方法
  • 原文地址:https://www.cnblogs.com/simplezhuo/p/10287429.html
Copyright © 2020-2023  润新知