Batch-Analyse / Log

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Splix
User
Beiträge: 3
Registriert: Samstag 30. Mai 2020, 13:19

Hallo liebe Python Community,

nachdem ich als stiller, nicht angemeldeter Beisitzer immer mal weider sehr hilfreiche Tipps gefunden habe, möchte ich mich dafür erstmal bei allen in diesem Forum bedanken.

Mein aktuelles Projekt bzw. die Idee ist es, mittels Python ein relativ komplexes Batch auszuführen. Es handelt sich dabei um Verkettung im Rahmen eines C-Built's.
Jetzt wäre meine aktuelle Frage, ob es eine Möglichkeit gibt, mittels Python ein Batch auszuführen und den "stdout" auszuleiten. Mittels Pipe ist dies soweit auch gelungen. Jedoch hätte ich gerne im Log-File einen Zeitstempel mit jeder Zeile. So könnte man eine Analyse über Batches starten in welchen Abschnitten man noch Optimierungspotenzial suchen kann.

Es ist jetzt nicht das alltägliche Problem und ich bin auch auf diversen Suchen bisher nicht fündig geworden.
Hätte jemand einen Ansatz, Module oder eine Idee wie so etwas zu realisieren wäre?

Vielen vielen Dank für die Unterstützung!

Viele Grüße

Christian
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Waere es nicht besser fuer sowas cmake zu benutzen? AFAIK kann das auch mit Zeitstempel loggen.

Und deine Zeitstempelei ist ein bisschen schwierig zu erreichen. Eine Pipe ist per Definition gebuffert, und wenn dein batch-Prozess nur kleckert, dann kommt bei Python ein Schwung Daten ggf. auch nur verspaetet an. Auch hier waere die Loesung, die Zeitstempel *in* den Batch-Prozess selbst zu bekommen.
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

Ähnlich wie __deets__ hätte ich jetzt vorgeschlagen, dass du vielleicht in Richtung Build-Systeme schauen könntest. Da gibt es auch welche, in denen man Python verwenden kann. Eines der bekannteren dürfe SCons sein. Allerdings muss man dazu sagen, dass es zu SCons viele negative Meinungen zu geben scheint. Damit sollte man sich vielleicht befassen, bevor man das produktiv einsetzen möchte.
Zuletzt geändert von nezzcarth am Samstag 30. Mai 2020, 16:19, insgesamt 1-mal geändert.
Splix
User
Beiträge: 3
Registriert: Samstag 30. Mai 2020, 13:19

Hallo zusammen und vielen Dank für eure schnelle Antworten.

Den Built-Prozess dahingehend anzupassen könnte etwas problematisch werden. Das ginge mit sicherheit mit einem gewissen Aufwand. Die Idee war jedoch, ein kleines Skript zu basteln über die man einfach mal eine Analyse laufen lassen kann. Hier geht es auch nicht um wirklich exakte Messungen der Compilezeit, sondern um eine Analyse dahingehend zielgerichtet zu starten, als dass man weiß, welche Abschnitte des Builts welche Zeiten in Anspruch nehmen.
Es ist ja nicht alleine der Built sondern auch noch viel Dateihandling zwischen einzelnen unabhängigen Built-Schritten.

Wenn man Google die richtigen Worte gibt, kommt man sogar oftmals ans Ziel bei seinen Problemen.
Ich hatte zwar schon viel am Subprocess Modul gebastelt aber es lief seit ein paar Stunden einfach nicht. Über Popen.stdout.readline() konnte ich da immerhin den output abfangen und loggen. Es wird sich zeigen, ob die Ergebnisse aus dem 5-Zeiler auch soweit plausibel sind, dass man daran vielleicht Optimierungsmaßnahmen am Built starten könnte.

Vielen Dank auf jeden Fall für eure Hilfe.
Ich werde wohl auch weiterhin für gewisse Raspi-Projekte hier im Forum aktiv bleiben

Viele Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Splix: Falls das mit dem Zeitstempel auch separat passieren darf und Linux verwendet wird, da gibt es im `moreutils`-Package (so heisst das zumindest unter Debian) ein ``ts``-Programm, das was auch immer man da rein piped mit Zeitstempeln versieht. Natürlich gegebenenfalls auch mit dem Buffer-Problem.

Allerdings sollte man das natürlich auch problemlos mit `subprocess` machen können. Was war denn da das konkrete Problem?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Splix
User
Beiträge: 3
Registriert: Samstag 30. Mai 2020, 13:19

Hallo,
privat nutze ich zwar viel Debian, da wäre das perfekt. Für das Arbeitssystem bin ich jedoch leider auf Win10 festgenagelt...
Das Problem: Es gibt einen Built, den man per Batch startet und gewiss etwas umfangreicher ist. Es kommt auf der Konsole/im Log sämtliche Info. Da es immer Potenzial zur zeitlichen optimierung gibt, dachte ich mir, ein Python Skript zu erstellen, dass die Batch ruft und den Output jeweils mit Zeitstempel separat speichert. Dieses Log liese sich dann ein wenig strukturieren und analysieren. Mein Ziel ist eigentlich die Erkenntnis, in welchem Teil des Built's man ein wenig Hirnschmalz investieren kann, um Zeit zu sparen.

Mein initiales Problem und Auslöser des Threads war, den subprocess nicht richtig aufzurufen.

Oftmals kommen die Lösungen dann beim beschreiben eines Problems. :)

Viele Grüße und einen schönen Feiertag
Antworten