Microsoft 파일의 간편한 통합 동기화
13316 단어 esp32MicroPythontech
개시하다
ESP32+Micropython저번을 계속 하면 PC에서 Micropython판으로 파일을 전송하는 ampy가 편리하지만 파일이 많으면 좀 불편하다.
그래서 이번 주제는 ampy를 편하게 해주고 싶다는 것이다.
다음과 같은 지침을 정했습니다.
아래 설명과 관련된 코드는 GiitHub에 있습니다.
주로scripts에서Makefile에 기술된 것과 관련이 있습니다
pinot-mirror 스크립트
이런 지령입니다.
git clone https://github.com/yoshinari-nomura/pinot.git
./scripts/pinot-mirror
Mirror local directory to MicroPython board and vice versa.
Usage: pinot-mirror [-p PORT] [-d] SRC DEST
-d Show SHA1 digests for each file (for debug).
-h Show this message.
-p PORT Set name of serial PORT for connected board.
SRC, DEST: Existing local directory or "ampy:"
CAVEAT: pinot-mirror removes extraneous files from DEST.
예를 들어 PC에 추가/변경/삭제된 src 디렉토리의 내용을 보드에 반영하려면 다음과 같이 하십시오../scripts/pinot-mirror -p /dev/ttyUSB0 src ampy:
결과:ampy rm /fonts/shnmk16u.pfn
ampy put src/lib/ili9341.py /lib/ili9341.py
ampy put src/main.py /main.py
이렇게 되면 무슨 일이 일어날지 확인했으니sh에게 파이프를 건네주자../scripts/pinot-mirror -p /dev/ttyUSB0 src ampy: | sh -v
보드의 차등 백업을 수행하려면 다음과 같이 하십시오.창고의 Makefile에 상기 목표가 있습니다.
pinot-mirror의 파일 동기화 방법
그 전에
pinot-mirror가ampy를 사용했기 때문에ampy에 대해 조금 설명할게요.
ampy는 USB(UART)를 통해 Micropython판의 파일을 읽고 쓰는 도구입니다. 예를 들어 PC의 file입니다.py를 보드에 전송할 때
ampy put file.py /lib/file.py
처럼 사용할 수 있어 편리합니다.다만, 개발 과정에서 여러 파일을 편집하면서 실험을 진행하면 손 옆에 변경된 파일이 있는지 확인하고 하나씩 전달하는 것은 번거롭다.
쌍방이 SHA1을 획득하다
ESP32 보드 때문인지 MS에서 파일 그룹을 얻는 SHA1은 생각보다 간단해 아래 코드로 얻을 수 있다.
digest-files.py
mkdir backup
./scripts/pinot-mirror -p /dev/ttyUSB0 ampy: backup | sh -v
실행 방법과 실행 결과는 예컨대 이렇다. 이후에 비교하기 쉽도록 미리 설명해라. (사실 CRLF → LF의 변경도 필요하다)#!/usr/bin/env python3
import binascii
import hashlib
import re
import os
import sys
class DigestDirtree:
def isdir(self, path):
return os.stat(path)[0] & 0x4000 != 0
def digest(self, path, echo = True):
hash = hashlib.sha1()
if self.isdir(path):
path = re.sub('/$', '', path) + '/'
for child in sorted(os.listdir(path)):
cpath = path + child
hash.update(self.digest(cpath))
hash.update(child.encode())
else:
with open(path, 'rb') as file:
while True:
s = file.read(512)
if len(s) <= 0:
break
hash.update(s)
sha1 = hash.digest()
if echo:
print(str(binascii.hexlify(sha1), 'ascii'), path)
return sha1
if __name__ == '__main__':
dir = sys.argv[1] if len(sys.argv) > 1 else '/'
DigestDirtree().digest(dir)
digest-remote.loggit clone https://github.com/yoshinari-nomura/pinot.git
export AMPY_PORT=/dev/ttyUSB0
ampy run ./scripts/digest-files.py | sort -k 2
이 스크립트는 로컬 PC(Pythhon3)에서도 마찬가지로 실행됩니다. 예를 들어, src/아래에 검사기와 동기화된 파일이 있는 경우12596e1ee44ed14ff56a7706585b2f76209bf0bb /
3947b36ed837906d45bee3e0d8a0befa17d9052c /boot.py
a09cc03731adfdc9053523544d0538902be6f024 /fonts/
87bebcaa5b7158a7f6193aa89a31f87f87b732cb /fonts/shnmk12u.pfn
5135ca0fdf22092df3cfa4cbc31de5db9f93a11e /fonts/shnmk16u.pfn
a0ce8d58b9fbbba0ced3516e825a6353da412145 /lib/
d402b5efd76cabcee2b6753a37e6e902a716b43e /lib/configserver.py
ea5aeccb7b4d8045ff504e190817b35883f76082 /lib/jsonconfig.py
79d8bbc24e338b87385477ceecd8d710c76ee32b /lib/mqtt.py
2899e94ec033003df7a0437a39e82eef92ba39d5 /lib/pnfont.py
8e6ead2602c64ae571aeebbc5a95024aea4ffb1e /main.py
sed조정을 통해 판의 출력과 동일하게/얻은 결과입니다.여기는 이런 느낌입니다.
digest-local.log
(cd src; ../scripts/digest-files.py .) | sort -k 2 | sed 's! [.]/! /!'
이 두 개만 비교해.비교 SHA1
SHA1 테이블이 두 개면 나머지는 간단합니다.
집행 결과는 이렇다.
digest-diff.log
c2a2bd20281d333fafabd6a0ce94052a43a3cab9 /
3947b36ed837906d45bee3e0d8a0befa17d9052c /boot.py
cc54df5e7fe76ab95f71ae56d4be3a0ed50f0831 /fonts/
87bebcaa5b7158a7f6193aa89a31f87f87b732cb /fonts/shnmk12u.pfn
fdec0d3d3b74a0b6702c1c84e330ddabf2abb07a /lib/
d402b5efd76cabcee2b6753a37e6e902a716b43e /lib/configserver.py
b0c8fadf2463267c53f8c9f6ae8098f6ca84cd31 /lib/ili9341.py
ea5aeccb7b4d8045ff504e190817b35883f76082 /lib/jsonconfig.py
79d8bbc24e338b87385477ceecd8d710c76ee32b /lib/mqtt.py
2899e94ec033003df7a0437a39e82eef92ba39d5 /lib/pnfont.py
ef923b09e3d1dbd829f5ce1fafb0cc7562048f22 /main.py
왼쪽은 보드의 한쪽, 오른쪽은 로컬 PC의 한쪽 SHA1입니다.좀 못생겼어요. 이 탁자에서 다음과 같은 차이를 볼 수 있어요.
0000000000000000000000000000000000000000
이 정보를 바탕으로ampy의 명령열을 출력합니다.끝말
오늘은 피곤하니 여기까지만 하자.
아시다시피 pinot는 조개 스크립트입니다. 지령선에서 시행 오류가 발생하면 어느새 완성됩니다.
제가 스크립트를 쓸 때 이번
pinot-mirror
처럼 조개껍질을 파이프로 먹게 하는 지령열을 출력하는 경우가 많아요. quote는 좀 번거롭지만 편하지 않아요?예를 들어 무시하고 싶은 파일이 있으면 pinot-mirror
조개에게 건네주면 된다.
Reference
이 문제에 관하여(Microsoft 파일의 간편한 통합 동기화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nom/articles/20211024-easy-sync-with-micropython-filesystem텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)