Seite 1 von 1

shutil.copy ohne Funktion

Verfasst: Sonntag 28. April 2024, 08:10
von Zeusdragoon
Guten Tag,
ich habe seit fast einem Jahr eine Python Programm zur Aufzeichnung meiner Heizungstemperaturen am laufen.
Seit Anfang des Monats läuft es nicht mehr, da keine Tages Logs mehr angelegt werden.
shutil.copy gibt auch kein Fehler aus, erst das Fehlen der Datei löst einen Load Error aus.

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/zeusdragoon/Heizung4a_Test.py", line 85, in <module>
    wb_log = load_workbook(pfad+Datei)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 315, in load_workbook
    reader = ExcelReader(filename, read_only, keep_vba,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 124, in __init__
    self.archive = _validate_archive(fn)
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 96, in _validate_archive
    archive = ZipFile(filename, 'r')
              ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/zipfile.py", line 1281, in __init__
    self.fp = io.open(file, filemode)
              ^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/zeusdragoon/240428_Log.xlsx'
Ich habe die betreffenden Zeilen aus dem Programm zusammengefast. Komischer weise läuft es damit.

Code: Alles auswählen

import shutil
from datetime import datetime

current_time = datetime.now()
time_stamp = current_time.timestamp()
date_time = datetime.fromtimestamp(time_stamp)
Datei=date_time.strftime("%Y%m%d")[2:]+str("_Log.xlsx")

pfad='/home/zeusdragoon/'

shutil.copy(pfad + "Master_Log.xlsx", pfad + Datei)
Ausgeführt wird es als Root und die verwendeten Dateien sind identisch mit dem Original Programm.

Für einen Hinweis wo ich noch suchen kann wäre ich sehr dankbar.
Gruß Markus

Re: shutil.copy ohne Funktion

Verfasst: Sonntag 28. April 2024, 08:27
von Sirius3
Wenn das Programm läuft, dann muss der Fehler woanders liegen. Z.b. beim Aufruf des Programms oder noch früher.
Wie werden die Programme aufgerufen? Wie werden Fehler protokolliert? Was für Meldungen tauchen in den Protokollen auf?

Das Kopierprogramm an sich ist gruselig. Als erstes wird das aktuelle Datum in ein timestamp umgewandelt und gleich danach wieder zurück. Den Schritt könnte man also einfach weglassen. Dann werden Strings munter per + zu Pfaden zusammengebaut, anstatt man f-Strings und pathlib benutzt. Für zweistellige Jahreszahlen gibt es %y.

Code: Alles auswählen

import shutil
from datetime import datetime
from pathlib import Path
MASTER_LOG =Path("/home/zeusdragoon/Master_Log.xlsx")

current_time = datetime.now()
target_path = MASTER_LOG.parent / f"{current_time:%y%m%d}_Log.xlsx"
shutil.copy(MASTER_LOG, target_path)

Re: shutil.copy ohne Funktion

Verfasst: Sonntag 28. April 2024, 09:28
von __blackjack__
@Zeusdragoon: Randbemerkung: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `datei` statt `Datei`. Wobei der Namen inhaltlich falsch ist. Das ist ja gar kein Datei-Objekt mit `read()` oder `write()` und `close()` Methoden, sondern ein Datei*name*. Und dann wäre es auch sinnvoll sich bei den Namen auf eine Sprache zu beschränken und nicht Englisch und Deutsch zu mischen.

Re: shutil.copy ohne Funktion

Verfasst: Sonntag 28. April 2024, 09:48
von Zeusdragoon
Wie man merkt bin ich nicht vom Fach.
Mein Programm ist ehre eine aneinander Reihung von Google Ergebnissen.
Lief aber bis vor kurzen, trotzdem kann ich nachvollziehen das sich euch die Nackenhaare aufstellen.
Ich bitte um Nachsicht.

@Sirius3
Das Programm läuft auf einem Pi Zero mit Debian 12 Bookworm
Ich starte das Programm im Autostart über /etc/rc.local
/usr/bin/python3 /home/zeusdragoon/Heizung4.py

Ansonsten zum testen über die Konsole per SSH Verbindung
Wie werden Fehler protokolliert?
ich meine gar nicht
Was für Meldungen tauchen in den Protokollen auf
wie kann man das ansehen?
Bis jetzt habe ich mir nur die Ausgabe in der Konsole angesehen.

vielen Dank für das verbessern meiner Codes

Re: shutil.copy ohne Funktion

Verfasst: Sonntag 28. April 2024, 10:38
von Sirius3
Wie ich gerade gelesen habe ist /etc/rc.local seit 1983 veraltet.
Auch Du solltest auf systemd umsteigen. Eine systemd-Unit zu schreiben ist mit den vielen Beispielen im Netz auch nicht allzu schwierig. Vorteil: Du bekommst das Protokoll zur Fehlersuche gleich mit.

Re: shutil.copy ohne Funktion

Verfasst: Mittwoch 1. Mai 2024, 16:34
von oldboyJR
PS: wer hat was geupdatet? Die Heizung ein neues Betriebsystem dein Laptop/tablet ein Autoupdate? Solche updates vertragen sich häufig nicht oder schränken ein. Klassisch ist zum Beispiel der Fernseher!! Hat man nicht sofort ein Backup vom ersten System erstellt und kann es darüber nicht wieder herstellen hat man die A.... Karte Apps und manche Einstellungen verschwinden einfach und synchronisationen funktionieren unwiederruflich nicht. Hat dein Laptop ein Autoupdate sollte man versuchen erst das System zu sichern und dann das alte wieder herstellen. Oder deine AbfrageUmgebung ist neu (neues Python) und die Syntax ist neuer. Dein post zeigt nicht die richtige Einstellungen sondern eine allgemeine Formulierung!! Richtig währe anstatt "filename" "filename.csv" oder "filename.xls", und so etwas wie "r" für read only. (versehendlich deinen ersten Versuch aufgerufen bzw die Bearbeitung nicht abgespeichert?)

Re: shutil.copy ohne Funktion

Verfasst: Mittwoch 1. Mai 2024, 17:19
von __blackjack__
@oldboyJR: Wie kommst Du denn jetzt auf Updates? Und welcher Laptop? Es geht hier um keinen Laptop. Und was hat Dein Fernseher damit zu tun?

Bei einem Syntaxfehler würde das Programm gar nicht erst starten. Es läuft ja aber, nur eine bestimmte Aktion wird nicht ausgeführt.

Das mit dem Dateinamen ist auch nicht nachvollziehbar. Im Traceback kommt `filename` vor, aber nicht in dem Quelltext von Zeusdragoon sondern in einer verwendeten Bibliothek, und dort ist das auch korrekt als *Variablenname*. Das ist ja nicht der literale Dateiname an der Stelle.

Re: shutil.copy ohne Funktion

Verfasst: Mittwoch 1. Mai 2024, 18:45
von Dennis89
__blackjack__ hat geschrieben: Mittwoch 1. Mai 2024, 17:19 Und was hat Dein Fernseher damit zu tun?
Ich weis gar nicht was du hast, da seit dem 1. April alles etwas entspannter in Deutschland geworden ist, sind mir solche Zusammenhänge plötzlich vollkommen klar, auch Nelli mein grüner Elefant versteht das.


SCNR! :mrgreen: