当前位置: 首页 > news >正文

Python通过串口收发文件

单位内外网是隔离的,USB对拷线被禁用,安全优盘使用太费事,就想到了通过串口传输文件.

import serial
from xmodem import XMODEM
import osdef Send_File(filepath, port='COM8', baudrate=115200):bn = os.path.basename(filepath)filesize = os.stat(filepath).st_sizestrSendFileCMD = "AFF_" + str(filesize) + "_" + bn + "\n"# 打开串口ser = serial.Serial(port, baudrate)# 定义YMODEM发送函数def send_ymodem(filename):def getc(size, timeout=1):return ser.read(size)def putc(data, timeout=1):return ser.write(data)modem = XMODEM(getc, putc)with open(filename, "rb") as f:status = modem.send(f)return status# 发送指令ser.write(strSendFileCMD.encode())# 发送文件status = send_ymodem(filepath)if status:print(f"文件发送成功:{filepath}")else:print(f"文件发送失败:{filepath}")# 关闭串口ser.close()def Recv_File(port='COM2', baudrate=115200):# 打开串口ser = serial.Serial(port, baudrate)# 定义YMODEM接收函数def recv_ymodem(filename):def getc(size, timeout=1):return ser.read(size) or Nonedef putc(data, timeout=1):return ser.write(data)modem = XMODEM(getc, putc)with open(filename, "wb") as f:status = modem.recv(f)return status# 循环监听指令while True:# 接收指令print("等待接收指令")strCMD = ser.read_until().strip().decode()print(strCMD)cmdlist = strCMD.split("_")cmd = cmdlist[0]filesize = cmdlist[1]filename = cmdlist[2]if cmd == "AFF":# 收到指令后开始接收文件print("开始接收文件")# 接收文件并保存status = recv_ymodem(filename)if status:print(f"文件接收成功:{filename}")else:print(f"文件接收失败:{filename}")# 继续监听指令continue# 其他指令print(f"收到指令:{cmd}")# 关闭串口ser.close()if __name__=="__main__":Send_File("D:/users.7z") #发送文件#Recv_File() #接收文件

上面是简单的文件传输代码.
我目前内外网传输最多的就是截图,内网通过串口给外网发送指令,外网根据指令截图,然后自动传回内网,不用切换电脑,不用插拔优盘,确实方便.

http://www.lryc.cn/news/239873.html

相关文章:

  • [crash] cxa_pure_virtual 崩溃分析与原理
  • 2023年学习Go语言是否值得?探索Go语言的魅力
  • 【C++11】=default与=delete关键字使用详解
  • [开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务
  • 边缘计算多角色智能计量插座 x 资产显示标签:实现资产追踪与能耗管理的无缝结合
  • chromium证书校验流程SM2WithSM3(C++源码说明)
  • 3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)
  • Jina AI 的 8K 向量模型上线 AWS Marketplace,支持本地部署!
  • ubuntu上查看各个进程的实时CPUMEM占用的办法
  • 电大搜题——打开学习之门的最佳选择
  • [论文笔记] Scaling Laws for Neural Language Models
  • 【每日OJ —— 622. 设计循环队列】
  • 【Vue】生命周期一文详解
  • JVM垃圾回收相关算法
  • crontab 无法激活、启动 pyenv failed to activate virtualenv
  • 系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗
  • pytorch中.to(device) 和.cuda()的区别
  • Mysql 递归查询子类Id的所有父类Id
  • 设计模式 之单例模式
  • ros2不同机器通讯时IP设置
  • Nginx模块开发之http过滤器filter
  • 26 - 原型模式与享元模式:提升系统性能的利器
  • 【Web安全】sqlmap的使用笔记及示例
  • 机器学习第12天:聚类
  • 若依框架导出下载pdf/excel以及导入打印等
  • 汇编-PROC定义子过程(函数)
  • 服务器主机安全的重要性及防护策略
  • PDF转成图片
  • Qt无边框设计
  • 规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法