From 7757e33a9760753940707410ebe8eacd30466bd1 Mon Sep 17 00:00:00 2001 From: dschlueter Date: Tue, 8 Sep 2026 20:04:53 +0200 Subject: [PATCH] veroeffentliche_04.py: leserliche Ausgabe, 404-Probe entfernt Der erste Alltagseinsatz zeigte drei Schoenheitsfehler, alle in der Ausgabe. Der Bericht stand verkehrt herum: Die rsync-Zeilen erschienen VOR "Ziel:" und "Vorpruefung bestanden". Python puffert seine Ausgabe blockweise, sobald sie nicht an ein Terminal geht, waehrend der Unterprozess unmittelbar schreibt. sys.stdout.reconfigure(line_buffering=True) stellt die Reihenfolge her. 150 Zeilen fuer eine uebertragene Datei: --itemize-changes lief auch im echten Durchgang mit, obwohl der Probelauf schon berichtet hatte, was passieren wird. 149 der 150 Zeilen besagten nur ".f..t......" - Inhalt gleich, nur Zeitstempel nachgezogen, die erwartbare Folge von --checksum. Die Auflistung bleibt jetzt dem Probelauf vorbehalten. Der Ersatz war zuerst schlimmer als das Problem: --info=progress2 zeigt am Terminal eine sich selbst ueberschreibende Zeile, in einer Pipe dagegen jeden Zwischenstand einzeln - gemessen 213 Zeilen fuer 213 Dateien. Die Anzeige haengt jetzt an sys.stdout.isatty(). Ausserdem: Die 404-Probe auf anhang-glossar-literatur.html ist entfernt. Die Datei ist geloescht - im Arbeitsbaum, in Git und auf dem Server -, und die Probe koennte einen Rueckschritt gar nicht mehr entdecken: Sie bliebe auch dann gruen, wenn jemand --delete aus dem rsync-Aufruf naehme. Was sie belegt hat, steht in PROGRESS.md. Von vierzehn Adressen bleiben dreizehn. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 2 +- ...rations_Research_mit_Python_Version_04.pdf | Bin 3815475 -> 3815476 bytes Operations_Research_mit_Python_Version_04.pdf | Bin 3815475 -> 3815476 bytes .../veroeffentliche_04.py | 39 +++++++++++++++--- PROGRESS.md | 25 +++++++++++ README.md | 5 +-- 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 08dc1a6..1e60dbd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,7 +70,7 @@ python3 Operations_Research_mit_Python_Version_04/veroeffentliche_04.py — **nicht** per `scp`, denn das überschreibt nur und löscht nie; eine aus dem Buch entfernte Seite bliebe sonst dauerhaft online. Vorher prüft es, ob eine Quelldatei neuer ist als die gebaute Website (die Website hing einmal wochenlang einen Bau zurück, ohne dass es auffiel), -hinterher ruft es vierzehn Adressen per HTTP ab. Bei mehr als 30 Löschungen bricht es ab — +hinterher ruft es dreizehn Adressen per HTTP ab. Bei mehr als 30 Löschungen bricht es ab — die Liste ist dann anzusehen, bevor `--loeschgrenze N` sie freigibt. Ziel in `.env` (nicht im Repository, Vorlage `.env.beispiel`); Anmeldung per SSH-Schlüssel, kein Passwort. diff --git a/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf b/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf index 24f209b2cd2dfee6a2fd1e9730dfcf757d6789e5..9ccab792b6692a05a0ca36f6f2f511a693934bb3 100644 GIT binary patch delta 17605 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 c{>OldhV(qM)hmkBsJD!bN9YXATM delta 17630 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%0D6DZa^O5yxZkBl6*YjRqt?C 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 L(uPu(3OG6{jY0;) diff --git a/Operations_Research_mit_Python_Version_04.pdf b/Operations_Research_mit_Python_Version_04.pdf index 24f209b2cd2dfee6a2fd1e9730dfcf757d6789e5..9ccab792b6692a05a0ca36f6f2f511a693934bb3 100644 GIT binary patch delta 17605 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 c{>OldhV(qM)hmkBsJD!bN9YXATM delta 17630 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%0D6DZa^O5yxZkBl6*YjRqt?C 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 L(uPu(3OG6{jY0;) diff --git a/Operations_Research_mit_Python_Version_04/veroeffentliche_04.py b/Operations_Research_mit_Python_Version_04/veroeffentliche_04.py index 1901de9..3547dbf 100755 --- a/Operations_Research_mit_Python_Version_04/veroeffentliche_04.py +++ b/Operations_Research_mit_Python_Version_04/veroeffentliche_04.py @@ -56,9 +56,15 @@ QUELLEN = [ os.path.join(BASIS, WEB_NAME), ] -# Was nach dem Hochladen erreichbar sein MUSS bzw. NICHT MEHR erreichbar sein -# darf. Die 404-Zeile ist die eigentliche Probe darauf, dass --delete gewirkt -# hat: Sie war der Anlass fuer dieses Skript. +# Was nach dem Hochladen erreichbar sein muss. +# +# Hier stand bis zur ersten Veroeffentlichung eine 404-Zeile fuer +# 'anhang-glossar-literatur.html' - die Seite, die nach dem Teilen von Anhang +# E/F verwaist auf dem Server zurueckblieb und der Anlass fuer dieses Skript +# war. Sie hat ihren Zweck erfuellt und ist wieder entfernt: Die Datei ist +# geloescht, und die Probe koennte einen Rueckschritt gar nicht mehr +# entdecken - sie bliebe auch dann 404, wenn jemand --delete aus dem +# rsync-Aufruf naehme. Was sie belegt hat, steht in PROGRESS.md. NACHPRUEFUNG = [ ("", 200), ("index.html", 200), @@ -73,7 +79,6 @@ NACHPRUEFUNG = [ ("assets/site.css", 200), ("katex/katex.min.js", 200), (PDF_DATEINAME, 200), - ("anhang-glossar-literatur.html", 404), ] LOESCHGRENZE = 30 @@ -200,10 +205,25 @@ def rsync_befehl(env: dict[str, str], probelauf: bool) -> list[str]: # auf beiden Seiten faellt dagegen nicht ins Gewicht. befehl = ["rsync", "-rltz", "--checksum", "--delete", "--chmod=D755,F644", "--skip-compress=pdf/zip/woff2/png/jpg/svg", - "--itemize-changes", "-e", ssh_optionen(env)] if probelauf: - befehl.append("--dry-run") + # Nur der Probelauf listet auf - seine Ausgabe wird gelesen und + # ausgewertet. Der echte Lauf wiederholte diese Liste sonst auf dem + # Bildschirm, obwohl schon berichtet wurde, was passieren wird: beim + # ersten Einsatz waren das 150 Zeilen, von denen 149 nur besagten, + # dass rsync einen Zeitstempel nachgezogen hat. + befehl += ["--dry-run", "--itemize-changes"] + elif sys.stdout.isatty(): + # Eine einzige, sich selbst ueberschreibende Fortschrittszeile - bei + # 23 MB ueber eine Hausleitung ist die Frage "laeuft es noch?" + # berechtigt. + # + # Nur am Terminal: progress2 ueberschreibt seine Zeile mit + # Wagenruecklauf. Laeuft die Ausgabe in eine Pipe oder Protokolldatei, + # bleibt jeder Zwischenstand als eigene Zeile stehen - gemessen + # 213 Zeilen fuer 213 Dateien, also genau das Rauschen, das hier + # abgestellt werden soll. + befehl.append("--info=progress2") ziel = env["OR_ZIEL"] befehl += [HTML_VERZ + os.sep, f'{env["OR_BENUTZER"]}@{env["OR_HOST"]}:{ziel}'] @@ -306,6 +326,13 @@ def main() -> int: help="Schritt 4 ueberspringen (kein Netz zum Server)") argumente = zerleger.parse_args() + # Sonst puffert Python seine Ausgabe blockweise, sobald sie nicht an ein + # Terminal geht (Pipe, Protokolldatei, Aufruf aus einer anderen Oberflaeche + # heraus). Die Meldungen dieses Skripts erschienen dann NACH der Ausgabe + # des rsync-Unterprozesses, der unmittelbar schreibt - der Bericht stand + # also verkehrt herum auf dem Bildschirm. + sys.stdout.reconfigure(line_buffering=True) + env = lies_env() ziel = f'{env["OR_BENUTZER"]}@{env["OR_HOST"]}:{env["OR_ZIEL"]}' print(f"Ziel: {ziel}") diff --git a/PROGRESS.md b/PROGRESS.md index 9e8c68a..25eaee4 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -2233,6 +2233,31 @@ folgt jetzt der Quelle. Damit ist jede der vier Stellen abgesichert: eine ist die Quelle, zwei werden daraus erzeugt, eine wird geprüft. +### ✅ Der Upload berichtet jetzt leserlich + +Der erste Alltagseinsatz des Skripts zeigte drei Schönheitsfehler, alle in der Ausgabe. + +**Der Bericht stand verkehrt herum.** Die `rsync`-Zeilen erschienen *vor* „Ziel:" und +„Vorprüfung bestanden". Ursache: Python puffert seine Ausgabe blockweise, sobald sie nicht +an ein Terminal geht, während der Unterprozess unmittelbar schreibt. Ein +`sys.stdout.reconfigure(line_buffering=True)` in `main()` stellt die Reihenfolge her. + +**150 Zeilen für eine übertragene Datei.** `--itemize-changes` lief auch im echten Durchgang +mit, obwohl der Probelauf längst berichtet hatte, was passieren wird. Von den 150 Zeilen +besagten 149 nur `.f..t......` — „Inhalt gleich, nur Zeitstempel nachgezogen", die +erwartbare Folge von `--checksum`. Die Auflistung bleibt jetzt dem Probelauf vorbehalten. + +**Und der Ersatz war zuerst schlimmer als das Problem.** Statt der Liste sollte +`--info=progress2` eine einzige, sich selbst überschreibende Fortschrittszeile zeigen. Am +Terminal tut es das; in einer Pipe bleibt jeder Zwischenstand als eigene Zeile stehen — +gemessen **213 Zeilen für 213 Dateien**. Die Anzeige hängt deshalb an +`sys.stdout.isatty()`. + +**Nebenbei aufgeräumt:** Die 404-Probe auf `anhang-glossar-literatur.html` ist entfernt. Sie +hat ihren Zweck erfüllt — aber einen Rückschritt könnte sie gar nicht mehr entdecken: Die +Datei ist gelöscht, die Probe bliebe auch dann grün, wenn jemand `--delete` aus dem +`rsync`-Aufruf nähme. Von den ursprünglich vierzehn Adressen bleiben dreizehn. + --- ## 8. Commit-Historie des V04-Strangs diff --git a/README.md b/README.md index d533477..2ea5f76 100644 --- a/README.md +++ b/README.md @@ -210,9 +210,8 @@ Vier Schritte, jeder mit einer eigenen Aufgabe: ist der Lauf verdächtig (falscher Zielpfad, halb gebautes Verzeichnis) und bricht ab; `--loeschgrenze N` hebt die Grenze an. 3. **Übertragung.** -4. **Nachprüfung per HTTP.** Vierzehn Adressen werden abgerufen und ihr Statuscode mit der - Erwartung verglichen — einschließlich der Probe, dass eine entfernte Seite wirklich 404 - liefert. +4. **Nachprüfung per HTTP.** Dreizehn Adressen werden abgerufen und ihr Statuscode mit der + Erwartung verglichen. `--probelauf` führt nur die Schritte 1 und 2 aus. In der `.env` steht **kein Geheimnis**: `rsync` und `scp` haben keine Passwort-Option, die Anmeldung läuft über den SSH-Schlüssel.