Fehlermeldung bei Ausfuehrung eines Python Programms

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
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo nochmals in die Runde,

ich habe leider Probleme bei der Ausführung eines Python Programms. Das Programm ist Teil eines ganzen Bundes an Tools, die ich von meinem Kunden bekommen habe.
Normalerweise würde man bei Problemen an diesen Kunden herantreten, allerdings hat sich dieser Weg bereits als nicht begehbar erwiesen.

Folgendes ist alles, was ich defacto sagen kann:

Ich starte das Programm PROGRAMMNAME.py auf eine bestimmte INPUT-Datei. Das Programm soll dann aus der Input-Datei bestimmte Inhalte herausziehen, umformatieren und in verschiedenen Dateien ablegen.
Wenn ich das Ganze Prozedere starte erhalte ich eine Datei PROGRAMMNAME-debug in der folgendes steht:

> ERROR: [Error 193] %1 ist keine zulässige Win32-Anwendung (WindowsError'>) (PROGRAMMNAME.py[376],PROGRAMMNAME.py[289],subprocess.py[506],subprocess.py[493],subprocess.py[679],subprocess.py[896])

Bisher habe ich das Ganze dann notgedrungen von meinem Kunden für mich erledigen lassen, aber das kann ja nicht die Lösung sein.

Mein Rechner arbeitet mit Windows 7 Professional 64bit und - das ist wichtig zu erwähnen - andere Tools aus diesem ganzen Bund funktionieren problemlos. Über eine mMn ausgiebigere Google Suche habe ich schon die Sache mit NET Framework 4.5 herausgefunden und kontrollieren können und auch blanks in dem Dateipfad kann ich ausschließen.

Ich hoffe nun ein wenig, ihr Profis hier könnt mir ein wenig mit dieser Debug Meldung helfen, denn hier bin ich nicht weiter gekommen...

Viele Grüße,

Der_Roman

P.S.: Und ich hab wirklich KEINE Ahnung von Python und auch nicht soooo sehr viel von Computern, also ideal wären vermutlich Erklärungen im Stile von der Art, wie man sie einem Säugling machen würde :wink: :roll: :wink: :roll: :wink:
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das sieht nicht nach einem Python-Problem aus, sondern danach das Programme, die von Python via subprocess gestartet werden nicht funktionieren. Mehr kann man dazu mangels Code nicht sagen.

Zur Fehlersuche bietet sich an, die entsprechenden Aufrufe in der Shell/Eingabeaufforderung selbst durchzufuehren, um zu schauen, ob die funktionieren. Solange das nicht gegeben ist, braucht man sich in Python auch nicht weiter auf Fehlersuche begeben.
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo __deets__,

danke für Deine Antwort!

Das Problem ist für mich, dass ich an den Programmen keine Rechte habe, außer diese zu nutzen.

Kann ich anhand der debug-Meldung irgendwie herausfinden, welche subprocesses ich nachsehen muss? Haben hier vielleicht die Zahlen in den eckigen Klammern eine hinweisende Bedeutung?

Ohjeohje, ich sehe schon, das wird nicht einfach werden...

Grüße und nochmals danke,

Der_Roman
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Der_Roman: woher kommt eigentlich die Zeile mit den Eckigen Klammern? Normalerweise zeigt Python einen sogenannten Traceback an, die Zeilen samt Inhalt, die Aufgerufen wurden um an die Stelle zu kommen, wo der Fehler sich zeigt, denn das ist meist nicht die Stelle, wo der Fehler verursacht wurde.

Das sieht so aus, als ob da jemand absichtlich den Traceback verstümmelt hat.

Wenn Du den Code nicht zeigen darfst, ist es natürlich schwierig, konkret zu Helfen.
In PROGRAMMNAME.py Zeile 289 müßte der Subprocess-Aufruf stehen, daraus kann man dann entweder direkt den Programmaufruf ablesen oder man müßte von dieser Stelle rückwärts suchen. Ein einfacher Debug-Versuch wäre den Subprocessaufruf durch ein `print` zu ersetzen.
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo zusammen,

Danke auch an Sirius3!

Okay, ich habe nun mal zumindest für mich den Code sichtbar machen können.

Wenn ich euch jetzt richtig verstehe, dann denkt ihr, liegt der Hund in der Ausführung eines der Subprocesses zusammen.
Wenn ich nun den Code nach *.py durchsuche, finde ich Dateinamen, die - so mein laienhaftes Verständnis - im Rahmen des eigentlichen Programmes quasi mit aufgerufen werden und im Hintergrund ebenfalls an der eigentlichen Input-Datei bzw. an "temporären Zwischendateien" arbeiten.

Die von Sirius erwähnte Zeile 289 zeigt, wie vermutet, einen dieser .py Dateinamen.

Ich habe nun - nur um grundsätzlich die Funktion zu testen - alle .py Programme, die im Code des "PROGRAMMNAME.py" (also des eigentlichen Programms das Probleme macht) zu finden waren einzeln gestartet und ich habe hier zumindest mal keine Fehlermeldungen oder dergleichen bekommen. Daher würde ich jetzt mal davon ausgehen, dass zumindest die von mir im Code gefundenen Unterprogramme soweit funktionieren, also auch bei mir funktionieren.
Mir scheint es also so, als ob wirklich irgendein Problem im Ablauf des PROGRAMMNAME.py auftaucht, das dann dazu führt, dass es nicht mehr weiter geht...

Die Zeile mit den eckigen Klammern ist sozusagen eine Ausgabedatei aus der PROGRAMMNAME.py und nennt sich PROGRAMMNAME-debug (keine Dateiendung, nichts; aber mit z.B. editor oder sonst irgendwas zu öffnen und lesbar --> die Zeile im Eingangspost ist sozusagen der komplette Dateiinhalt).

Ich weiß, bzw. dachte mir schon das es nahezu unmöglich sein wird, ohne Code. Der Inhalt der debug-datei und das ihr die "lesen" könnt war ein wenig mein Hoffnungsschimmer. Aber aus meiner wirklich sehr kleinen Programmiererfahrung mit anderen Sprachen weiß ich, das das alles mitunter echt uferlos sein kann...

Grüße,

Der_Roman
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst noch nicht mal diese eine Zeile posten? Hast du dich mit denen so zerstritten, das sie dich verklagen bis zum Bankrott? Wenn's sein muss, schick mir die Zeile per PN, dann wird das nicht oeffentlich.
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo,

jetzt steh ich gerade auf dem Schlauch...

Wenn Du die Zeile aus der debug-datei meinst, die steht im Eingangspost.

Die Zeile 289, die Sirius ansprach sollte diese hier sein:

subprocess.check_call([os.path.join(instdir, "ANDERER-DATEINAME.py"), forcesPath])


Ich habe nur den Dateinamen der Python-Datei in dieser Zeile geändert.

Zerstritten habe ich mich überhaupt nicht, nur gehören diese Tools einem Weltkonzern und ich bin NICHT deren Angestellter :wink: , sondern nur Dienstleister für sie. Darum möchte ich eigentlich nicht mehr offenlegen, auch wenn das wohl am Ende zur Folge hat, das mir dann nicht mehr geholfen werden kann.
Auch via PN möchte ich den Code nicht weitergeben, ich hoffe das kann verstanden werden. Auch, wenn ich die Mühen von Euch sehr zu schätzen weiß, das soll bitte nochmal ausdrücklich gesagt sein.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na wenn die dir etwas liefern, das nicht geht, und dann nicht dafuer sorgen koennen, das es laeuft... nunja. Aber sei's drum.

Die Zeile ist allerdings schon mal aufschlussreich: da wird angenommen, das die Endung .py mit einem Python-Interpreter verknuepft ist. Das ist nicht so besonders robust.

Was du probieren kannst ist

Code: Alles auswählen

subprocess.check_call([sys.executable, os.path.join(instdir, "ANDERER-DATEINAME.py"), forcesPath])
zu machen. Dazu muss das Modul sys natuerlich importiert sein! In der Datei in der deine Zeile steht, muss am Anfang irgendwo

Code: Alles auswählen

import sys
stehen, und wenn es da nicht steht, musst du es einfuegen.
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo und guten Morgen,

ich habe jetzt mal folgendes gemacht:

Ich habe das "sys.executable, " in die Zeile eingefügt, wie von @__deets__ vorgeschlagen. Ansonsten habe ich erstmal nichts gemacht, habe die Datei unter anderem Namen gespeichert und ausgeführt.

Was kam heraus? --> es war auf alle Fälle schon mal irgendwas anders, es wurde eine Datei erzeugt, die vorher nicht erzeugt wurde.

Also habe ich den Code weiter durchsucht und habe das "sys.executable, " einfach noch an einer zweiten Stelle eingefügt, wieder unter eigenem Namen gespeichert und neu ausgeführt.

Und:

Tadaaaa, ich habe nun schon mal all die Dateien, die ich bekommen sollte.

Ich bin nun gerade dabei noch den Inhalt der Ausgabedateien verifizieren zu lassen um auch wirklich sicher zu sein, aber es sieht so aus als ob damit mein Problem in der Ausführung des Basisprogrammes behoben sein könnte.

Vielen vielen Dank schon mal an der Stelle und vor allem für die Geduld mit mir Programmier-Pfeie,

Der_Roman



edit: import sys war bereits gesetzt im Code.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst ja mal an deinen Weltkonzern rückmelden, das eine Programmierpfeife & ein zufälliger Typ aus dem Internet ihren Dreck wegräumen mussten .... :lol:

aber schön das es klappt.
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

.....niemals in die Hand beißen, die einen füttert :lol: :lol: :lol:

Ich bin jetzt wirklich auch erleichtert.

Nochmals vielen vielen Dank "zufälliger Typ" :lol: 8)
Der_Roman
User
Beiträge: 9
Registriert: Dienstag 21. November 2017, 10:37

Hallo zusammen,

ich wollte noch kurz ein abschließendes Feedback geben:

Es läuft alles wie es soll und auch die ausgegebenen Daten sind nun verifiziert. Es war zwar eigentlich klar, dass da nichts sein kann, aber nichtsdestotrotz ist es jetzt abgesichert.

Nochmals Danke an __deets__ und Sirius3

Der_Roman
Antworten