Aber egal, das funktioniert, und da es elegant sein soll, warum nicht? Wieder was neues kennengelernt.
Den Logger heb ich mir für später auf, der ist mir ein wenig zu redselig. Ich brauch ja nur immer das Zwischenergbnis für mich, dass ich weiß was der Code da tut.
Aber ich sehe schon, dass das noch nützlich werden kann...
Danke für die Tipps!
Den Teil des Codes habe ich nun in mein USB-Überwachungsteil eingebaut, das jetzt so wie ich es jetzt hab, die beiden Dateiinhalte austauscht, wie es das soll.
Gibt bestimmt was zu verbessern. )
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pathlib import Path
import pyudev
import time
import pathlib
from datetime import datetime as DateTime
###---------------------------------------------------
PFAD = Path.home() / ".DruckData"
##ABFRAGE_FILENAME = PFAD / "TB_Ausgabe_Abfrage8StueckII.txt"
##ZAEHLER_FILENAME = PFAD / "numbers.csv"
###----------------------------------------------------
MEDIA_PFAD = Path('/media/earl/')
WECHSEL_DATEI_NAMEN = ["numbers.csv", "TB_Ausgabe_8iii.txt"]
print(MEDIA_PFAD)
context = pyudev.Context()
def usb_ansteckerkenner():
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by('block')
for device in iter(monitor.poll, None):
if 'ID_FS_TYPE' in device: ###
print(device.action)
if device.action == 'add':
name_of_stick = Path(device.get('ID_FS_LABEL'))
print(name_of_stick)
time.sleep(2)
return name_of_stick
####--------------------------------------------------------------------#####
def copy(source_path, destination_path):
try:
text = source_path.read_text(encoding="utf-8")
destination_path.write_text(text, encoding="utf-8")
except FileNotFoundError as error:
print(error)
####--------------------------------------------------------------------#####
def datei_auf_stick(name_of_stick, dateipfad, timestamp):
copy(
PFAD / dateipfad,
MEDIA_PFAD
/ name_of_stick
/ dateipfad.with_name(
f"{dateipfad.stem}_{timestamp:%Y-%m-%d_%H_%M}.csv"
),
)
####--------------------------------------------------------------------#####
def datei_auf_arbeitsverzeichnis(name_of_stick, dateipfad):
copy(MEDIA_PFAD / name_of_stick / dateipfad, PFAD / dateipfad)
####--------------------------------------------------------------------#####
def main():
timestamp = DateTime.now()
name_of_stick = usb_ansteckerkenner()
for dateiname in map(Path, WECHSEL_DATEI_NAMEN):
datei_auf_stick(name_of_stick, dateiname, timestamp)
datei_auf_arbeitsverzeichnis(name_of_stick, dateiname)
if __name__ == "__main__":
main()
Wenn die Datei nicht da ist, soll da eine kleine Box aufgehen, die knapp drüber informiert, dass da mit den Dateien was nicht passt.
Die Box soll über den Knöpfen des anderen Codeteils liegen und nichts anderes machen als den stick zu unmounten.
Grübel...