py Scripte ins Hauptprogramm einbinden mit Fehlern

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
Bengele
User
Beiträge: 5
Registriert: Mittwoch 11. Januar 2023, 15:14

Hallo,
ich versuche gerade zwei Py Unterprogramme in ein Main Programm ein zu binden.
Dabei komme ich nicht weiter, da immer die gleiche Fehlermeldung kommt (siehe unten).
Die Unterprogramme alleine laufen ohne Probleme. Nur in Verbindung mit dem Main Programm habe das Problem.
Eine weitere Aufgabe die ich beweltigen muss, ist die Stromausgabe (Daten) des SiliconLabs.
Es muss eine Möglichkeit geben die Ausgabedaten des SiliconLabs in mein Main Programm weiter zu verarbeit oder in eine Variable zu bekommen.


Hier mein Versuch:
-------->1. Unterprogramm ruft ein Strommessung.py (SiliconLabs und soll eine Spannung/Leistung/Stom ausgeben) auf:

import subprocess
subprocess.run(["commander", "aem", "measure", "–-timestamp", "--serialno", "440273585"])

------>2. Unterprogramm ruft ein Firmware_Loader.py (JLink Programmieradapter) auf:

import subprocess

def main():
try:
subprocess.run(
["commander", "flash", "test-file.hex", "-d", "EFR32BG22", "--serialno", "821007470"],
cwd="G:/Kunden/Interflex/1106219979A 02-11071-01Ba I_O Connector SRP/Firmware/Firmware",
check=True,
)
except subprocess.CalledProcessError:
print("flash error")
else:
print("flash ok")


if __name__ == "__main__":
main()

-------> Beide Programme werde im Main.py aufgerufen mit:

import subprocess
from Strommessung import *
from Firmware_Loader import *
subprocess.run("Strommessung", shell=True)
subprocess.run("Firmware_Loader", shell=True)


--> Nachdem das Main Programm abgearbeitet wurde kommt folgendes Ergebnis heraus:

Averaged over 100 ms:
Current [mA]: 0.000111
Power [mW] : 0.000366
Voltage [V] : 3.314
DONE

Der Befehl "Firmware_Loader" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "Strommessung" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Process finished with exit code 0


-------> Was könnte da machen????

Gruß
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

subprocess.run ist zum starten von Prozessen. Nicht zum starten beliebiger Python-Funktionen. Die ruft man einfach auf, ggf. muss man sie dafuer erst importieren. Aber ich wuerde mal behaupten, dass bischen Code hier rechtfertigt ueberhaupt nicht den Aufwand, da mehrere Dateien anzulegen.
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ergänzend: ``shell=True`` sollte man nicht verwenden weil man sich damit die gleichen Probleme einhandelt wegen denen man `subprocess` und nicht `os.system()` verwenden sollte. Wäre auch in beiden Fällen gar nicht nötig, wenn es sich um externe Programme handeln würde.

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
Bengele
User
Beiträge: 5
Registriert: Mittwoch 11. Januar 2023, 15:14

Danke für die Erklärungen.
Es ist auch kein muss, dass die beiden Py Programme seperat ausgeführt werden. Ich wollte dies einfach mal probieren.

Danke für die Hilfe.
Antworten