-
> **说明:阅读该文档之前需要对Mqtt有一定的了解,这里不对Mqtt知识作介绍,对Mqtt的了解请自行搜索学习。主要说明一下用一个简单的Demo样例,实现和IoT平台的对接,上报数据,下发命令等** ### 一、注册设备 #### 1. 开发中心 注册设备 ##### (1)查看产品信息 > 产品信息中的 协议类型 必须为MQTT  ##### (2)注册设备 > 设备管理—>新增真实设备—>选择上面开发好的产品—>接入方式选择 直连  ##### (3)注册设备成功之后需要保存的信息 > 保存设备ID和密钥,利用其构建clientID  #### 2. 设备管理/设备接入 注册设备 ##### (1)查看产品模型 > 进入设备管理界面—>产品模型 > > 如果没有产品模型,可以点击右上角,从产品中心导入或者是本地导入 > > 注意:产品的协议类型必须为MQTT  ##### (2)注册设备 > 进入设备管理界面—>设备—>设备注册—>创建  ##### (3)注册设备成功之后需要保存的信息 > 保存设备ID和密钥,利用其构建clientID  #### 3. 北向接口 注册设备 > 注册设备(密码方式) > > https://support.huaweicloud.com/api-IoT/iot_06_0005.html ### 二、IoT平台提供的原生MQTT接口 > https://support.huaweicloud.com/api-IoT/iot_06_3002.html 本篇文档基于eclipse的paho框架,该框架网上资料较多,可自行百度搜索学习。 - Python 库: paho_mqtt-1.4.0-py3.7.egg-info #### 1.MQTT CONNECT连接鉴权 (1) 主要是证书的配置,ca_certs就是证书的路径 (2) 其他参数的配置请参考源码:) * Python ```python # 连接地址每个局点不一样,比如开发中心是:iot-acc-dev.huaweicloud.com host = "xx.xx.xx.xx" port = 8883 # 注册直连设备的时候返回的设备ID deviceId = "9a57a-***-***-816b3e" # 注册直连设备的时候返回的秘钥 DeviceSecret = "cbd*******3abv" ca_certs = '../rootcert.pem' para = get_para.Getpara(deviceId, DeviceSecret) paras = para.get_para() clientId = paras[0] username = paras[1] password = paras[2] mqtt = mqtt.Client(clientId, clean_session=True) def connect(): # callback mqtt.on_connect = on_connect mqtt.on_disconnect = on_disconnect mqtt.on_publish = on_publish mqtt.on_message = on_message mqtt.username_pw_set(username, password) mqtt.tls_set(ca_certs, cert_reqs=ssl.CERT_NONE) mqtt.connect(host, port, 60) mqtt.loop_forever() ``` #### 2.设备上报数据 > 数据上报就是往平台指定的topic上发布数据 * Python ```python def publish(): pubTopic = "/huawei/v1/devices/" + deviceId + "/data/json" payload = { "msgType": "deviceReq", "data": [ { "serviceId": "Storage", "serviceData": { "storage": "1" } } ] } message = json.dumps(payload) mqtt.publish(pubTopic, message, 1) ``` #### 3.设备接收命令 > 命令接收就是订阅平台指定的topic,平台往该topic发送命令时,设备端就能收到 * Python ```python def subscribe(): subtopic = "/huawei/v1/devices/" + deviceId + "/command/json" mqtt.subscribe(subtopic) def on_message(client, userdata, msg): print("\n===== The command is received from the platform ===== \n", msg.payload.decode("utf-8")) receiveMes= json.loads(msg.payload.decode("utf-8")) mid = receiveMes['mid'] commandRsp(mid) ``` #### 4.设备响应命令 > 1. 应用服务器要需要调用“订阅平台业务数据”API订阅**“commandRsp”**类型的通知后,才能接收到设备对控制命令的应答; > 2. 先订阅topic(**/huawei/v1/devices/{deviceId}/command/{codecMode}**)接收到命令,然后往另外一个topic(**/huawei/v1/devices/{deviceId}/data/{codecMode}**)发数据响应给平台,就视为对这条命令的响应,但是要注意,数据上报和命令响应的topic虽然是相同的,但是他们上报的结构体是有区别的 * Python ```python def commandRsp(mid): RspTopic = "/huawei/v1/devices/" + deviceId + "/data/json" payload = { "msgType": "deviceRsp", "mid": mid, "errcode": 0, "body": { "result": 0 } } message = json.dumps(payload) mqtt.publish(RspTopic, message, 1) ``` #### 5.工具类 > 生成 clientId, username, password ```python class Getpara(): def __init__(self, deviceId, deviceSecret): self.DeviceId = deviceId self.DeviceSecret = deviceSecret def get_para(self): ClientId = self.DeviceId DeviceId = self.DeviceId DeviceSecret = self.DeviceSecret timestamp = time.strftime('%Y%m%d%H', time.localtime(time.time())) # clientID参考API文档拼装 clientId = "".join((ClientId, "_0", "_0", "_", timestamp)) username = DeviceId deviceSecret = DeviceSecret.encode('utf-8') password = hmac.new(timestamp.encode('utf-8'), deviceSecret, digestmod=hashlib.sha256).hexdigest() return clientId, username, password ```
-
软件介绍Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于89年底发明,第一个公开发行版发行于1991年。像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议。支持版本和获取方式运行python on arm系统,建议使用版本为python-2.7.16。编译和测试方式本文选用华为鲲鹏云服务ECS KC1实例做测试,KC1实例的处理器为兼容ARMv8指令集的鲲鹏920。1. 操作系统选择使用的操作系统为Euler 2.8,内核版本号为:4.19.36。2. 获取源代码python官网(https://www.python.org/)提供httpd的源代码压缩包,可以直接下载,各版本的列表可以通过:https://www.python.org/downloads/source/获取3. 编译环境配置l 安装依赖包:yum install zlib zlib-devel openssl openssl-devel -y4. 编译源代码l 本文以python-2.7.16为例,下载python-2.7.16源码,并编译安装:wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz tar -zxvf Python-2.7.16.tgz cd Python-2.7.16 ./configure --enable-optimizations make -j4 make install其他使用技巧l 为了安装后的python开启ssl模块,在make之前,先修改Modules/Setup文件,把下面方框的内容解除掉注释,修改内容如下:软件下载源码下载:立即下载
-
#化鲲为鹏,我有话说#最近做网页开发遇到了一个问题,就是怎么把Python部署到华为云服务器上?自己在实践过程中好像又要说写php,但是自己才疏学浅,不知道怎么编写,然后是不是可以用本地的IIb把文件传送到华为服务器网络端上?求大神解答
-
Python SDK 代码如下点击运行改代码,在IOT开发界面看到如下看到有消息记录出现,但是只有一条,而且在设备模拟器看不到数据。单独在应用模拟器和设备模拟器运行都是可以的,证明编解码参加和profile文件都是匹配的,那么我感觉是SDK的Python body参数写错了,希望有人能帮忙解决。
-
Python如何爬取实时变化的WebSocket数据 一、前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图:  Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSocket 这两种。轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 '实时' 的效果,虽然看起来数据像是实时更新的,但实际上它有一定的时间间隔,并不是真正的实时更新。轮询通常采用 拉 模式,由客户端主动从服务端拉取数据。 WebSocket 采用的是 推 模式,由服务端主动将数据推送给客户端,这种方式是真正的实时更新。 二、什么是 WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket 优点 较少的控制开销:只需要进行一次握手,携带一次请求头信息即可,后续只传输数据即可,相比 HTTP 每次请求都携带请求头,WebSocket 非常省资源。 更强的实时性:由于服务器可以主动推送消息,这使得延迟变得可以忽略不计,相比 HTTP 轮询的时间间隔,WebSocket 可以在相同的时间内进行多次传输。 二进制支持:WebSocket 支持二进制帧,这意味着传输更节省。 …… 爬虫面对 HTTP 和 WebSocket Python 中的网络请求库非常多,Requests 是最常用的请求库之一,它可以模拟发送网络请求。但是这些请求都是基于 HTTP 协议的。在面对 WebSocket 的时候 Requests 就发挥不料作用了,必须使用能够连接 WebSocket 的库。 三、爬取思路 这里以莱特币官网 http://www.laiteb.com/ 实时数据为例。WebSocket 的握手只发生一次,所以如果需要通过浏览器开发者工具观察网络请求,则需要在打开页面的情况下,打开浏览器开发者工具,定位到 NewWork 选项卡,并输入或刷新当前页面,才能观察到 WebSocket 的握手请求和数据传输情况。这里以 Chrome 浏览器为例:  在开发者工具中提供了筛选功能,其中 WS 选项代表只显示 WebSocket 连接的网络请求。 这时候可以看到请求记录列表中有一条名为 realTime 的记录,鼠标左键点击它后,开发者工具会分为左右两栏,右侧列出本条请求记录的详细信息:  与 HTTP 请求不同的是,WebSocket 连接地址以 ws 或 wss 开头。连接成功的状态码不是 200,而是 101。 Headers 标签页记录的是 Request 和 Response 信息,而 Frames 标签页中记录的则是双方互传的数据,也是我们需要爬取的数据内容: Frames 图中绿色箭头向上的数据是客户端发送给服务端的数据,橙色箭头向下的数据是服务端推送给客户端的数据。 从数据顺序中可以看到,客户端先发送: {"action":"subscribe","args":["QuoteBin5m:14"]} 复制代码 然后服务端才会推送信息(一直推送): {"group":"QuoteBin5m:14","data":[{"low":"55.42","high":"55.63","open":"55.42","close":"55.59","last_price":"55.59","avg_price":"55.5111587372932781077","volume":"40078","timestamp":1551941701,"rise_fall_rate":"0.0030674846625766871","rise_fall_value":"0.17","base_coin_volume":"400.78","quote_coin_volume":"22247.7621987324"}]} 复制代码 所以,从发起握手到获得数据的整个流程为: 那么,现在问题来了: 握手怎么弄? 连接保持怎么弄? 消息发送和接收怎么弄? 有什么库可以轻松实现吗? 四、aiowebsocket Python 库中用于连接 WebSocket 的有很多,但是易用、稳定的有 websocket-client(非异步)、websockets(异步)、aiowebsocket(异步)。 可以根据项目需求选择三者之一,今天介绍的是异步 WebSocket 连接客户端 aiowebsocket。其 Github 地址为:https://github.com/asyncins/aiowebsocket。 ReadMe中介绍到: AioWebSocket是一个遵循 WebSocket 规范的 异步 WebSocket 客户端,相对于其他库它更轻、更快。 它的安装和其他库一样简单,使用 pip install aiowebsocket 即可。安装好后,我们可以根据 ReadMe 中提供的示例代码来测试: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator message = b'AioWebSocket - Async WebSocket Client' while True: await converse.send(message) print('{time}-Client send: {message}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), message=message)) mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'ws://echo.websocket.org' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 运行后的结果输出为: 2019-03-07 15:43:55-Client send: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:55-Client receive: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:55-Client send: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:56-Client receive: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:56-Client send: b'AioWebSocket - Async WebSocket Client' …… 复制代码 send 表示客户端向服务端发送的消息 recive 表示服务端向客户端推送的消息 五、编码获取数据 回到这一次的爬取需求,目标网站是莱特币官网: 从刚才的网络请求记录中,我们得知目标网站的 WebSocket 地址为:wss://api.bbxapp.vip/v1/ifcontract/realTime,从地址中可以看出目标网站使用的是 wss,也就是 ws 的安全版,它们的关系跟 HTTP/HTTPS 一样。aiowebsocket 会自动处理并识别 ssl,所以我们并不需要作额外的操作,只需要将目标地址赋值给连接 uri 即可: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator while True: mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'wss://api.bbxapp.vip/v1/ifcontract/realTime' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 运行代码后观察输出,你会发现什么都没有发生。既没有内容输出,也没有断开连接,程序一直在运行,但是什么都没有: 这是为什么呢? 是对方不接受我方的请求吗? 还是有什么反爬虫限制呢? 实际上,刚才的流程图可以解释这个问题: 整个流程中有一步是需要客户端给服务端发送指定的消息,服务端验证后才会不停推送数据。所以,应该在消息读取前、握手连接后加上消息发送的代码: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator # 客户端给服务端发送消息 await converse.send('{"action":"subscribe","args":["QuoteBin5m:14"]}') while True: mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'wss://api.bbxapp.vip/v1/ifcontract/realTime' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 保存后运行,就会看到数据源源不断的推送过来: 到这里,爬虫就能够获取到想要的数据了。 aiowebsocket 做了什么 代码不长,使用的时候只需要将目标网站 WebSocket 地址填入,然后按照流程发送数据即可,那么 aiowebsocket 在这个过程中做了什么呢? 首先,aiowebsocket 根据 WebSocket 地址,向指定的服务端发送握手请求,并校验握手结果。 然后,在确认握手成功后,将数据发送给服务端。 整个过程中为了保持连接不断开,aiowebsocket 会自动与服务端响应 ping pong。 最后,aiowebsocket 读取服务端推送的消息 【奎因:】如果你认为 aiowebsocket 帮助了你,那么请你到 Github https://github.com/asyncins/aiowebsocket 上给一个 Star。如果在使用当中发现问题或者希望给 aiowebsocket 提建议,那么也可以到 Github 上提出。只要你提出建议,就一定能够帮助 aiowebsocket 变的更好,而 aiowebsocket 也能够继续为你服务。
-
不要上电情况下拨动AT_PC<->AT_MCU 开关不要上电情况下拨动不要上电情况下拨动AT_PC<->AT_MCU 开关重要事情说三遍真的会悲剧(;´д`)ゞ。今天在404交流群看到有小伙伴的bearPi出现了不识别模块和花屏的情况。那么为啥会这样的,作为半吊子,只知道不规范操作会导致这个情况。实验时也是小心翼翼,然而,还是犯错了,上电时拨动了 AT_PC<->AT_MCU 开关。播完的一瞬间,似乎也没有发生什么可怕的事情,但是在我尝试按reset时,串口中断里开始奔乱码了这里看了一下,也不啥大问题,对应看一下usart 的76到94行 ,这个乱码的地方应该是触发了这个_Error_Handler()但是接下来的事儿就比较吓人了,小概率性的出现了花屏,路灯模块也神经病一样闪瞎一切。心想,这作业还没写呢,怎么就烧掉了,断电,尝试复现,再也没出现,真的是奇了。但是想想以前玩儿51的时候,貌似也是不敢随便热拔插,除非做了保护措施。为了确保板子能活过我顺利通关,学懂这套物联网方案,后续操作还是小心点儿比较好。避免热拔插模组和传感器;避免上电情况下随便拨动 AT_PC<->AT_MCU 开关;最好做些防静电处理再摸小熊;祝各位同修早日通关
-
#化鲲为鹏,我有话说#这次参加比赛的过程中遇到了,需要修改ARM服务器上大文件的内容的问题,一开始用python进行修改1g的文件,使用普通的read write消耗了很长的时间,大概60多s,后来找了方案,在python中使用mmap,这个好像也没怎么改善,估计是语言的关系。没办法,只能找C或者c++,在c/c++中使用mmap,好快,只要5s。原来他是通过内存映射的方式,减少对io的使用,代价就是耗内存。
-
【摘要】 今天是七夕节,中国传统的情人节。 今天我把我的表白方式传送给大家,请注意查收!今天是七夕节,中国传统的情人节。可预期到的是,估计有很多年轻的情侣们,已经为这个节日提前准备好久了吧?烂大街的套路无非就是送花、吃饭、电影院,看完电影找酒店。作为一个引爆消费的特别日子,程序猿们如何过节呢?今天公司博客举行了一个投票活动,七夕怎么过!结果多数人的投票都是闭门思过、一觉而过,难怪你们找不到女朋友啊!今天我就教你们如何不花钱,还能为心仪的她送去特别的礼物!这个骚操作不知道诱惑了多少人去学python,其实怎么说,如果真的代码写成那个样子,下班走夜路最好自带三级头,不然很容易挨闷棍。代码如下:print('\n'.join([''.join([('LovePython'[(x-y)%10]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))效果:技术是不错,但是如果你把这个当做礼物送给女朋友,除非你是不想见到明天的太阳了…今天要教大家更犀利的骚操作!现在不说妹子的手机有没有美图秀秀之类的美化软件了,连很多爷们儿的手机都有这些软件你敢信?美图秀秀有一个拼图的功能,你可以手动选择心形拼图,然后把你喜欢的图片一张一张的贴到对应的方框内,最终做出一个心形的图片…那么今天,我就教大家使用Python,绘制一个心形的女友照片墙!美图秀秀上,存在了大小图的分类,我们为了降低难度,都是用等比例的图片,进行心形绘图。首先我们需要先画出来一个心形的图片,然后按照小格子进行分类。我拿html配合css简单做了一个心形的图,大家先来看看效果。因为是边想边做的格子,所以拿ul标签一点一点拼出来的,没有使用js去动态生成…怕前端大神嘲讽,就不贴代码了太占内容(文末会随python代码一起提供下载路径…)这是一个9X9的div排列框体,我们只需要将红色的方框填充上女友的图片,即可完成心形照片墙的效果。你说自己没有女友?没关系啊,你给心仪的妹子做一个心形照片墙,说不定今天你就有了!当然你也可以为你的基 友做一个,我这人很开明,不鼓励不排斥,哈哈…准备图片首先你需要整理一些女友的图片,这个是大前提!我从微信找了12张媳妇儿的照片,先保存到一个文件夹内:随机选填这里有人要问了,数了一下上面红色的方格一共有52个,你只有12章图片,怎么做?照你这么说,如果你直接从相册取1000张图片,是不是还得给你画个花心大萝卜出来?我们需要引入random模块,并且使用random.choice将图片的list进行动态选择并填充。这样就解决了大家图片数量不固定的问题,你可以放几千张选也可以只放一张!图片合成昨天写到的python图片转素描画中使用到了pillow库,今天我们一样用它就能实现!def mark_pictures(self): heart_image = Image.new('RGB', (128 * SideLength, 128 * SideLength)) row = col = 0 for side in range(SideLength * SideLength): if images_side_calc(col, row): img = Image.open(random.choice(self.image_list)) img = img.resize((128, 128), Image.ANTIALIAS) else: img = Image.new("RGB", (128, 128), (255, 255, 255)) heart_image.paste(img, (row * 128, col * 128)) col += 1 if col == SideLength: col = 0 row += 1 if row == col == SideLength: break heart_image.save("heart_image.jpg")我们先创建一个空的画布,然后规定每张图片的固定尺寸为128X128,然后我们按照红框的计算,动态填充图片或者白色的幕布。至于如何计算心形,除了最后的三角形有规律可循,上面的几行,只能每行去单独判断了images_side_calc方法如下:def images_side_calc(row, col): if row == 0 and col in [1, 2, 6, 7]: return True elif row == 1 and col not in [3, 4, 5]: return True elif row == 2 and col != 4: return True elif row in [3, 4]: return True elif row >= 5 and (row - 5) < col < (13 - row): return True最终效果如下:大家可以看到,由于我只使用了12张图片,所以会出现一些随机重复的图片,大家使用的话,可以多选择一些照片,效果会更好一些!在这里,把这份七夕礼物,送给远在重庆姐姐家避暑的媳妇儿,祝你七夕快乐!♥既然工具写好了,当然要方便那些没有python环境的人们使用啊,使用pyinstaller打包工具,无需依赖python环境,双击exe输入图片存储地址,皆可完成心形照片墙的绘制:当然,由于没有像昨天的素描画一样配置tkinter的GUI,只能在cmd下手动输入路径,完成照片墙的制作,如果大家喜欢可以照着昨天的内容,手写一个GUI界面。OK,今天的内容就到这里,欢迎大家关注清风Python公众号----------------------------------------------本文转自王翔的清风Python微信公众号
-
1、简介 iRedMail 是一个基于 Linux/BSD 系统的零成本、功能完备、成熟的邮件服务器解决方案。 官方链接:https://www.iredmail.org/index.html 类别:邮件服务2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.6 Kernel4.14 软件包Python2.7.5 iRedMail 0.9.9 3、依赖安装无4、组件编译安装准备工作:1、 在安装 iRedMail 之前,请先确保在你的机器上安装了一个全新的 CentOS 7 操作系统:2、 使用下面的命令确保系统更新了最新的安全补丁和软件包。# yum update3、 系统需要一个 FQDN 主机名,使用下面的命令设置。使用你自定义的 FQDN 代替 mail.tecmint.lan 变量。# hostnamectl set-hostname mail.tecmint.lan使用下面的命令验证系统主机名。# hostname -s # Short name# hostname -f # FQDN# hostname -d # Domain# cat /etc/hostname # Verify it with cat comman4、 通过手动编辑 /etc/hosts,将机器的 FQDN 和短名称映射到机器的回环 IP 地址。添加如下所示的值,并相应替换 mail.tecmint.lan 和 mail 的值。127.0.0.1 mail.tecmint.lan mail localhost localhost.localdomain5、禁用 SELinux。通过编辑 /etc/selinux/config 并将 SELINUX 参数的值从 permissive 设置成 disabled重启机器并应用新的 SELinux 策略,或者运行 setenforce 带上参数 0 来强制 SELinux 立即禁用。vim /etc/selinux/configSELINUX=disabled# reboot或者# setenforce 06、 接下来,安装下面这些接下来会用来系统管理的软件包:# yum install bzip2 net-tools bash-completion wget使用tar包安装:下载tar包wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2tar xvf iRedMail-0.9.9.tar.bz2安装cd iRedMail-0.9.9bash iRedMail.sh欢迎页,选择Yes,继续选择存储位置选择前端web服务器选择后端数据库指定LDAP后缀输入你的域名 从列表中选择要与邮件服务器集成的可选组件,按默认选输入y,继续 完成后,安装器会提供一些敏感信息。比如 iRedAdmin 凭证、web 面板的 URL 地址以及安装过程中使用的所有参数的文件位置init 6 重启# init 6系统重启后,使用 root 权限的帐户登录或以 root 身份登录,并使用下面的命令列出所有的网络套接字以及你邮件服务器监听的相关程序。在套接字列表中,你会看到邮件服务器几乎覆盖邮件服务正常运行所需的所有服务:SMTP/S、POP3/S、IMAP/S 和防病毒以及垃圾邮件保护。# netstat -tulpn iRedMail.tips 这个文件保存了iRedMail 已修改的所有配置文件的位置、iRedMail 安装过程中用于数据库管理的凭据、邮件管理帐户以及其他帐户。# less iRedMail-0.9.6/iRedMail.tips5、系统配置无6、测试测试内容:访问邮件服务测试结果:访问成功 7、参考信息官方文档:https://docs.iredmail.org/index.html 参考:https://docs.iredmail.org/install.iredmail.on.rhel.html 8、FAQQ:系统上升级了Python3,安装过程中出现python脚本错误A:这个版本需要Python2才能正确执行安装过程中的一些脚本,注意检查python版本为2.x。
-
1、简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 官方链接:https://www.python.org/getit/ 类别:编程语言2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Python2.7.5 3、依赖安装无4、组件编译安装在yum源中查找python列表yum list | grep python查出结果:在yum源中进行安装yum install python.aarch645、系统配置无6、测试测试内容:Python是否能正常使用vim test.pypython test.py测试结果:7、参考信息官方文档:https://www.python.org/doc/8、FAQ无
-
我使用OceanConnect_Python_SDK_Demo例子,先修改自己的连接信息如下(我可以确保appid和secret是正确的):运行了下AuthenticationTest.py文件,鉴权失败信息如下:现在不知道咋办了,appid和secret肯定是没错的,求大神解救下
-
CommandDTOV4.py中,CommandDTOV4结构体paras这么定义该如何使用?
-
Python对pdf的各种操作,包含pdf转word,pdf转图片,pdf翻转,加密,加水印等。https://www.yuanrenxue.com/tricks/python-process-pdf.html 如何操作这里给大家介绍一下操作步骤。希望对大家有用。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签