配置核查模块 开发总结 (1)

本文分享了使用Python的paramiko模块实现SSH连接的过程及挑战,并探讨了Python中包和模块的导入机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

到最后终于在deadline之前将开发工作进行完了 。虽然遇到一些坑但是过程还算顺利,从两个月前的预研,设计,到最后 的开发,算是 大姑娘上轿头一回,独立的完成了软件开发周期的这三个过程 。

以下记录一些在开发过程中遇到的问题以及解决办法:

在实现上遇到的一些问题:

配置核查,顾名思义,是要对配置信息进行核查。所以首先要拿到目标主机的配置信息,如此就必须与远程主机进行通信,一开始选择 了两种通信方式 :telnet 和 SSH,后来考虑的安全性,还是选择了SSH。
这样摆在面前的问题是怎么样去实现SSH通信模块?
人生苦短我用python,python中提供了  paramiko模块用来 创建SSH对象可以与目标主机进行通信,

paramiko
使用如下方法获取对象:

def getMyssh(ip, userName, passWord,Mytimeout = 5):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,userName,passWord,timeout=5)
except:
traceback.print_exc()
raise
return ssh
接着使用 获取的ssh,与 目标主机进行交互

myssh = getssh(ip, sshuser, sshpass, port)
stdin, stdout, stderr = myssh.exec_command("cat /etc/mysql/my.cnf")
out = stdout.readlines()


关于python自定义模块的一些问题:


Package(包) Import

包(Package)可以看成模块的集合,只要一个文件夹下面有个__init__.py文件,那么这个文件夹就可以看做是一个包。包下面的文件夹 还可以成为包(子包)。更进一步,多个较小的包可以聚合成一个较大的包,通过包这种结构,方便了类的管理和维护,也方便了用户的使用。比如 SQLAlchemy等都是以包的形式发布给用户的。

包和模块其实是很类似的东西,如果查看包的类型import SQLAlchemy type(SQLAlchemy),可以看到其实也是<type 'module'>。import包的时候查找的路径也是sys.path。

包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的__init__.py而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。如:

PA

--__init__.py

--wave.py

--PB1

--__init__.py

--pb1_m.py

--PB2

--__init__.py

--pb2_m.py

__init__.py都为空,如果有以下程序:

 
  1. import sys
  2. import PA.wave #1
  3. import PA.PB1 #2
  4. import PA.PB1.pb1_m as m1 #3
  5. import PA.PB2.pb2_m #4
  6. PA.wave.getName() #5
  7. m1.getName() #6
  8. PA.PB2.pb2_m.getName() #7

当执行#1后,sys.modules会同时存在PA、PA.wave两个模块,此时可以调用PA.wave的任何类或函数了。但不能调用PA.PB1(2)下的任何模块。当前Local中有了PA名字。

当执行#2后,只是将PA.PB1载入内存,sys.modules中会有PA、PA.wave、PA.PB1三个模块,但是PA.PB1下的任何 模块都没有自动载入内存,此时如果直接执行PA.PB1.pb1_m.getName()则会出错,因为PA.PB1中并没有pb1_m。当前Local 中还是只有PA名字,并没有PA.PB1名字。

当执行#3后,会将PA.PB1下的pb1_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、 PA.PB1.pb1_m四个模块,此时可以执行PA.PB1.pb1_m.getName()了。由于使用了as,当前Local中除了PA名字,另外 添加了m1作为PA.PB1.pb1_m的别名。

当执行#4后,会将PA.PB2、PA.PB2.pb2_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m、PA.PB2、PA.PB2.pb2_m六个模块。当前Local中还是只有PA、m1。

下面的#5,#6,#7都是可以正确运行的。

注意的是:如果PA.PB2.pb2_m想导入PA.PB1.pb1_m、PA.wave是可以直接成功的。最好是采用明确的导入路径,对于./..相对导入路径还是不推荐用。


### 企业微信功能模块开发概述 企业微信作为一款高效的企业沟通工具,提供了丰富的开放接口供开发者使用。这些接口涵盖了消息发送、应用管理、成员管理等多个方面。以下是关于企业微信功能模块开发的相关说明。 #### 接口基础 企业微信的API由宿主环境提供,类似于小程序中的API设计[^1]。开发者可以通过调用企业微信提供的能力实现多种业务需求,例如获取用户信息、操作通讯录以及集成第三方服务等功能。 #### H5网页支付接入流程 对于涉及支付场景的应用开发,可以参考H5网页支付的具体实现方法。当前微信官方支持两种主要支付模式:JSAPI支付和H5支付[^2]。其中, - **JSAPI支付**适用于微信内置浏览器内的交易处理; - **H5支付**则针对外部浏览器发起请求并跳转至微信客户端完成付款的情况。 #### 错误处理机制 在实际开发过程中可能会遇到各种异常情况,此时应依据错误码进行排查解决。比如当接收到如下形式的响应时: ```json { "message": "失败", "code": "1001", "data": null } ``` 这表明出现了某种特定类型的错误[^3],需按照对应文档指引逐一核查参数设置是否正确无误。 #### 域名与安全配置 首次启用某些高级特性前往往需要做好前期准备工作,像合法域名绑定就是其中之一。具体而言,要确保所使用的URL地址已完成ICP备案手续,并按指示上传验证文件到指定位置以便审核通过后生效;另外还需补充登记公司内部认可范围内的静态IP列表来增强安全性保障措施[^4]。 ```python import requests def bind_domain(domain, txt_file_url): """ 绑定已备案域名并通过上传TXT记录完成身份认证 参数: domain (str): 待绑定的目标网址字符串 txt_file_url (str): TXT格式校验凭证所在链接路径 返回值: bool: 如果成功执行返回True否则False """ try: response = requests.post('https://qyapi.weixin.qq.com/cgi-bin/service/binddomain', json={ 'domain': domain, 'txt_record': {'url': txt_file_url}, }) result = response.json() if result['errcode'] == 0: return True else: print(f"Error occurred while binding the domain:{result}") return False except Exception as e: print(e) return False ``` 以上代码片段展示了如何利用Python脚本来自动化部分手动步骤从而简化整个工作流效率提升显著的同时也减少了人为失误概率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One_knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值