Logging File

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EllaBtz
User
Beiträge: 7
Registriert: Montag 6. Mai 2019, 11:22

Hallo,

ich möchte gerne in meinem Python Skript ein Logfile erstellen, welches testet, ob die Datei bestimmte Formate einhält. Zum Beispiel dass unterhalb der Überschriften jeweils eine Leerzeile gelassen wird und wenn diese Leerzeile fehlt, soll er ein Logfile ausgeben, in dem steht, dass diese Leerzeile eben fehlt.
Kann mir da jemand helfen bzw einen Ansatz geben?

Grüße
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Hi, woran genau scheiterst du denn? Am besten postest du deinen Ansatz hier und es wird sich jemand finden, der dir weiterhilft. Zum Posten von Code bitte die Code-Tags verwenden. </>
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit logging hat das ja erstmal nichts zu tun. Der erste Schritt besteht in einer Validierung der eingabe, deren Ergebnis man dann weiter verarbeitet. Logging ist eine Möglichkeit, einen Verarbeitungsprozess zu steuern jene andere. Und die Valididierung erfolgt üblicherweise durch das parsen der eingabe, gefolgt von einer Prüfung bestimmter Eigenschaften auf dem durch das parsen erzeugten Datenmodell. Beispiele sind zb XML und die diversen dafür existententen Schema-Spezifikation.

Welches Format liegt denn deinen Dateien zugrunde? Es gibt ja viele, zb Markdown etc. Gibt es dafür bereits einen Parser?
EllaBtz
User
Beiträge: 7
Registriert: Montag 6. Mai 2019, 11:22

Ja, ist ein Markdown file, es gibt auch schon einen Parser.

ich bräuchte nur einen ansatz, wie man dem Parser sagt, dass er nach bestimmten Eigenschaften in diesem md file suchen soll
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@EllaBtz: Dazu sind Parser nicht da. Die parsen ein Eingabeformat in eine interne Darstellung. Nach Eigenschaften suchen musst Du schon selbst. Und eventuell sind diese Eigenschaften des Eingabeformats nach dem parsen in der internen Darstellung dann auch gar nicht mehr da, so dass Du Dir selbst einen Parser schreiben musst der die Informationen erhält die Du benötigst um Deine Prüfungen zu machen. Zum Beispiel ist eine Leerzeile zwischen Überschrift und Text in Markdown nicht erforderlich. Eine eventuell vorhandene Leerzeile (oder auch mehrere) werden von den meisten Parsern aber einfach ignoriert/verworfen, denn die trägt nicht zum Endergebnis bei.

Edit: Und nur um mal zu zeigen dass das gar nicht so einfach zu erkennen ist was eine Überschrift ist und was nicht:

Code: Alles auswählen

# Headline
sc
ss

<pre>
# No headline
blah
</pre>

    # No headline
    foo

  # Headline
text
Man kann das bei dem Farbschema von dem Syntaxhighligthing hier nicht wirklich gut erkennen, aber der hier verwendete Highlighter bekommt das zum Beispiel schon mal nicht zuverlässig hin wie es aussieht.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
EllaBtz
User
Beiträge: 7
Registriert: Montag 6. Mai 2019, 11:22

Die Überschriften sind jeweils mit # versehen, z.b ##Titel##
Löscht man die Leerzeile unterhalb dieser Überschrift, bricht der Parser ab und es entsteht ein Fehler, dann bekomm ich aber nur eine Email mit "Pipeline has failed", ich möchte aber dass dann z.B "Logfile Warning: dont remove empty lines" drinnen steht ..
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Welchen Fehler bekommst du denn GENAU? Denn eigentlich sollte ein Parser an dieser Stelle einen Fehler werfen, den du abfangen kannst & den du dann in eine gute Log-Meldung verwandeln kannst.
EllaBtz
User
Beiträge: 7
Registriert: Montag 6. Mai 2019, 11:22

</>
args.func(args, all_profiles)
File "/src/main.py", line 54, in process_commit
testing(company, profile, args, use_artifacts_dir=True)
File "/builds/src/test.py", line 55, in testing
sed_inplace(maintex, r'{longtable}\[c\]', '{longtable}[]')
File "/builds/src/util.py", line 28, in sed_inplace
with io.open(filename, encoding='utf8') as src_file:
FileNotFoundError: [Errno 2] No such file or directory: 'artifacts/xy.tex'
ERROR: Job failed: exit code 1
</>

Das steht in der Email "Pipeline has failed"
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@EllaBtz: So einfach ist das nicht denn wie mein Beispiel zeigt ist nicht alles was mit # versehen ist auch eine Überschrift. Ob Leerzeichen davor sein dürfen wird von unterschiedlichen Parsern unterschiedlich gehandhabt, aber ich habe bisher noch keinen gesehen bei dem nach der Überschrift eine Leerzeile sein muss. Das Original `Markdown.pl` erwartet das nicht, Pandoc auch nicht, ebensowenig StackOverflow.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Fehlermeldung ist leider nicht wirklich verwertbar, denn augenscheinlich wird da nur auf die Existenz eines Resultats geschaut. Wie sieht denn der Code aus, der das Markdown in Tex wandelt?
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich frage mich dann auch gerade ob das Problem tatsächlich „keine Leerzeile *nach* einer Überschrift“ ist und nicht eher „keine Leerzeile *vor* etwas“ das eine Leerzeile verlangt‽
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten