Python通過(guò)串口實(shí)現(xiàn)收發(fā)文件
單位內(nèi)外網(wǎng)是隔離的,USB對(duì)拷線被禁用,安全優(yōu)盤使用太費(fèi)事,就想到了通過(guò)串口傳輸文件.
import serial
from xmodem import XMODEM
import os
def Send_File(filepath, port='COM8', baudrate=115200):
bn = os.path.basename(filepath)
filesize = os.stat(filepath).st_size
strSendFileCMD = "AFF_" + str(filesize) + "_" + bn + "\n"
# 打開串口
ser = serial.Serial(port, baudrate)
# 定義YMODEM發(fā)送函數(shù)
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
# 發(fā)送指令
ser.write(strSendFileCMD.encode())
# 發(fā)送文件
status = send_ymodem(filepath)
if status:
print(f"文件發(fā)送成功:{filepath}")
else:
print(f"文件發(fā)送失敗:{filepath}")
# 關(guān)閉串口
ser.close()
def Recv_File(port='COM2', baudrate=115200):
# 打開串口
ser = serial.Serial(port, baudrate)
# 定義YMODEM接收函數(shù)
def recv_ymodem(filename):
def getc(size, timeout=1):
return ser.read(size) or None
def putc(data, timeout=1):
return ser.write(data)
modem = XMODEM(getc, putc)
with open(filename, "wb") as f:
status = modem.recv(f)
return status
# 循環(huán)監(jiān)聽指令
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}")
# 繼續(xù)監(jiān)聽指令
continue
# 其他指令
print(f"收到指令:{cmd}")
# 關(guān)閉串口
ser.close()
if __name__=="__main__":
Send_File("D:/users.7z") #發(fā)送文件
#Recv_File() #接收文件上面是簡(jiǎn)單的文件傳輸代碼.
我目前內(nèi)外網(wǎng)傳輸最多的就是截圖,內(nèi)網(wǎng)通過(guò)串口給外網(wǎng)發(fā)送指令,外網(wǎng)根據(jù)指令截圖,然后自動(dòng)傳回內(nèi)網(wǎng),不用切換電腦,不用插拔優(yōu)盤,確實(shí)方便.
到此這篇關(guān)于Python通過(guò)串口實(shí)現(xiàn)收發(fā)文件的文章就介紹到這了,更多相關(guān)Python串口收發(fā)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中串口通信庫(kù)pyserial基礎(chǔ)知識(shí)
- Python讀取串口數(shù)據(jù)的實(shí)現(xiàn)方法
- python讀取串口數(shù)據(jù)有幾種方法
- python serial串口通信示例詳解
- 玩轉(zhuǎn)串口通信:利用pyserial庫(kù),Python打開無(wú)限可能
- Python串口通信的接收與發(fā)送的實(shí)現(xiàn)
- python實(shí)現(xiàn)串口通信的示例代碼
- Python?Serial串口的簡(jiǎn)單數(shù)據(jù)收發(fā)方式
- 使用Python玩轉(zhuǎn)串口(基于pySerial問(wèn)題)
- python串口讀取數(shù)據(jù)的實(shí)例
- 使用 Python 列出串口的實(shí)現(xiàn)方法
- Python中串口操作的實(shí)現(xiàn)示例
相關(guān)文章
利用python爬取古詩(shī)文網(wǎng)中各類古詩(shī)的方法
這篇文章主要介紹了利用python爬取古詩(shī)文網(wǎng)中各類古詩(shī)的方法,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03
淺談使用Python變量時(shí)要避免的3個(gè)錯(cuò)誤
這篇文章主要介紹了淺談使用Python變量時(shí)要避免的3個(gè)錯(cuò)誤,還是比較不錯(cuò)的,涉及部分代碼分析,以及字典的創(chuàng)建等相關(guān)內(nèi)容,需要的朋友可以參考下。2017-10-10
Python中用format函數(shù)格式化字符串的用法
這篇文章主要介紹了Python中用format函數(shù)格式化字符串的用法,格式化字符串是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),本文主要針對(duì)Python2.7.x版本,需要的朋友可以參考下2015-04-04
利用Pandas和Numpy按時(shí)間戳將數(shù)據(jù)以Groupby方式分組
這篇文章主要介紹了利用Pandas和Numpy按時(shí)間戳將數(shù)據(jù)以Groupby方式分組,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python設(shè)置環(huán)境變量的作用和實(shí)例
在本篇文章里小編給各位整理了關(guān)于python設(shè)置環(huán)境變量的作用和實(shí)例內(nèi)容知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)參考下。2019-07-07
Python Matplotlib條形圖之垂直條形圖和水平條形圖詳解
這篇文章主要為大家詳細(xì)介紹了Python Matplotlib條形圖之垂直條形圖和水平條形圖,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Python列表轉(zhuǎn)一維DataFrame的完整指南
在數(shù)據(jù)處理領(lǐng)域,Pandas的DataFrame是當(dāng)之無(wú)愧的王者,本文將用5個(gè)核心方法,教你優(yōu)雅地將一維列表轉(zhuǎn)換為Pandas DataFrame,感興趣的可以了解下2025-04-04

