Python3 QThread, subprocess und ein C-Programm

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
bitstacker
User
Beiträge: 7
Registriert: Montag 28. Juli 2014, 13:32

BlackJack hat geschrieben:@bitstacker: Das sieht aber alles wenig robust aus.

Warum heisst der Prozess `f`? Das ist ein sehr nichtssagender Name.

Die Fehlerbehandlung mit dem ``except`` ist falsch weil danach einfach weitergemacht wird als wäre nichts passiert, und das endet dann unweigerlich in Zeile 14 in einem `NameError` weil im Fehlerfall `f` ja gar nicht an das `Popen`-Exemplar gebunden wurde.

Klammern um Bedingungen bei ``while``/``if``/… sind nicht nötig und auch nicht üblich. Ausserdem sieht es ohne ein Leerzeichen so aus wie ein Funktionsaufruf, was verwirren kann, wenn zum Beispiel der Quelltext ohne Syntaxhervorhebung gelesen wird.

`readline()` wird eigentlich nicht verwendet weil Dateiobjekte Iteratoren über die Zeilen in der Datei sind, und man deshalb das flexiblere `next()` verwenden kann.

Mit der Schleife die 5 Zeilen überliest und dann das Tag ausliest ist die IMHO brüchigste Stelle erreicht. Du machst Dich da völlig von einer allgemeinen, nicht formal spezifizierten Ausgabe von dem Programm abhängig die für Menschen gedacht ist und nicht für Programme. Das Format kann sich mit jeder neuen Version der Bibliothek ändern, hängt vielleicht sogar vom Chiptyp oder vom konkreten Treiber oder ähnlichem ab. Man sollte da vielleicht selber ein Protokoll spezifizieren das man dann implementiert und das ”maschinenlesbar” ist. Man könnte auch über das `stdout` des C-Programms nur die Kommunikation zum externen Programm laufen lassen, und andere Ausgaben wie Bibliotheksversion und so Debugausgaben auf `stderr` ausgeben. Dann braucht sich das Python-Programm darum gar nicht erst kümmern.

``f.terminate()`` wird niemals erreicht, weil die Endlosschleife davor nicht verlassen wird.
Danke, das sind alles echt gute Tipps :) Also meine Lösung, die ich da oben gepostet habe, war auch nur als kurzer Test gedacht (Ob das mit dem flushen funktioniert).
Das mit den Klammern kommt wohl davon, wenn man dauernd zwischen so vielen Sprachen hin und her hüpft :D Bin wohl noch nicht so ganz python3 sicher.
Das sich da das C-Programm bzw. die Library ändert ist nicht vorgesehen, das ist alles auf einem Embedded System ohne Internetanschluss. Aber das ich da die unnötigen Ausgaben rausschmeisse ist ebenfalls eine gute Idee.

Nochmals Vielen Dank für die Hilfe!

Gruß
bitstacker
Antworten