独自快乐|嵌入式软件开发助手(1),Python实用案例编程入门:第二十章( 四 )


withopen(core_file,'rb')ascoreHandle:content_by_hex=coreHandle.read().hex()rs=content_by_hex.rfind(''.join(sp))ifrs!=-1:content_by_hex=content_by_hex.replace(''.join(sp)+'0000000000000000',''.join(sp)+''.join(lr)+''.join(pc))withopen('repaired-'+core_file,'wb')asnew_coreHandle:content_by_binary=binascii.unhexlify(content_by_hex)new_coreHandle.write(content_by_binary)更多关于该模块的详细信息可以参考下面的链接 。
20.3.10redis模块Redis模块是一个内存中的数据结构存储系统 , 我们这里使用它作为我们的数据库 。 个人觉得比较简单实用包括部署和操作 。 而且跟Python常用的数据能够很好的融合 , 比如字符串 , 散列 , 列表和集合等等 , 同时也支持磁盘持久化 。 可以通过Redis的中文网站进行学习和下载 。 我们的例子将只用到最基本 , 最简单的特性 , 就是当作一个数据库来存储数据 , 同时可以为每条数据设置一个有效期 。 而实际上 , Redis非常强大 , 性能也很好 , 感兴趣的读者可以进行深入的学习 , 这里只做一些比较简单的介绍 。
我们的程序中redis操作代码片段如下 。
defredis_instance(ip,port):logging.debug("getdata")pool=redis.ConnectionPool(host=ip,port=port,decode_responses=True,socket_connect_timeout=3)r=redis.Redis(connection_pool=pool)logging.debug(r)try:r.ping()logging.debug('pingsuccess')returnrexceptTimeoutError:logging.error('redisconnectiontimeout'+ip)returnNoneexcept:logging.error("redisdon'texist")returnNonedefget_key_from_redis(ip,port,key):testline=[]r=redis_instance(ip,port)ifr:logging.debug("getdata:"+key)testline=r.lrange(key,0,-1)logging.debug(testline)returntestlinedefadd_key_to_redis(ip,port,key,value):r=redis_instance(ip,port)ifr:logging.debug(f"addkey:{key}{value}")redis_mutex.lock()iflist==type(value):foriteminvalue:r.rpush(key,item)elifstr==type(value):r.rpush(key,value)#extime=datetime.datetime(0,0,0,12,00,00)r.expire(key,28800)#28800redis_mutex.unlock()defdelete_value_of_key_from_redis(ip,port,key,value):r=redis_instance(ip,port)ifr:logging.debug(f"deldata:{key}{value}")redis_mutex.lock()r.lrem(key,0,value)redis_mutex.unlock()defdelete_key_from_redis(ip,port,key):r=redis_instance(ip,port)ifr:logging.debug(f"delkey:{key}")redis_mutex.lock()r.delete(key)redis_mutex.unlock()这里我们将相应的操作都封装成了函数 , 并做了加锁操作 。
20.3.11requests模块requests模块是一个用于访问网络的模块 , 我们这里的程序需要先进行用户鉴权 。 在通过用户名和密码进行鉴权通过后 , 我们的程序才被运行访问数据库 , 对数据库进行相应的读写操作 。
requests模块也可以用于从网络上下载文件 , 在其他相关程序例子中会涉及这方面的介绍 , 这里只关注当前实例程序需要使用到的内容 。
【独自快乐|嵌入式软件开发助手(1),Python实用案例编程入门:第二十章】下面的代码片段就是我们程序中使用到的用于登陆到鉴权网页进行认证的函数 , 我们将用户名和密码及网页地址作为参数传递给post操作 , 然后通过post操作返回的文本进行判断是否鉴权成功 。 在我们的例子中 , 成功返回的页面文本中包含"Success"字样字符串 。
defauth_via_requests(self,i):payload={}payload['username']=self.usernamepayload['password']=self.passwordsuccess_flag='UserAuthentication:Success'ret=Falsewithrequests.Session()ass:p=s.post(self.url,data=https://pcff.toutiao.jxnews.com.cn/p/20200825/payload)ifsuccess_flaginp.text:logging.info(success_flag)ret=Truereturnret


推荐阅读