Frage

Ich versuche, ein Python -Skript aus einem Python -Programm auszuführen, indem ich es von Subprozess ausschüttle (der Grund dafür ist, dass das Hauptprogramm beendet sein muss, wenn das Skript ausgeführt wird, mit einer Kombination aus WX.Callafter und Close). Wenn das Skript jedoch ausgeführt wird, erhalte ich in Zeile 1 einen Fehler mit ImportError: No module named os Das lässt mich denken, dass es etwas mit dem Pythonpath zu tun hat, aber ich kann das Drehbuch gut aus einem Terminal ausführen.

Warum kann das Skript keine Kernmodule sehen, wenn sie auf diese Weise ausgeführt werden?

Bearbeiten: Die fragliche Zeile lautet:

wx.CallAfter(subprocess.Popen,'python %s "%s" %s %s'%(os.path.join(BASE_DIR,"updatecopy.py"),BASE_DIR,pos[0],pos[1]),shell=True)

Base_dir ist nur das Verzeichnis, in dem das Drehbuch lebt.

War es hilfreich?

Lösung

Subprozess ist da, weil os.exec* veraltet wurde, sodass ich nicht empfehlen würde, das anstelle von Popen zu verwenden, wie jemand vorgeschlagen hat.

Ich habe dieses Problem gesehen, als ich aus einem gefrorenen Prozess ausgeführt wurde. Wenn dies der Fall ist, erben Sie höchstwahrscheinlich eine seltsame Umgebung für den neuen Python -Prozess.

Die meisten gefrorenen Skripte werden versuchen, aus einer ZIP -Datei auszulaufen. In diesem Fall ist es kein Wunder, dass Python nichts finden kann, alles in einer Zip -Datei gefangen ist :)

Wenn dies die Situation ist, versuchen Sie, mit der ausführbaren Python -Ausführung zu laufen, mit der Sie das gefrorene Skript ausführen. Es sollte in der Lage sein, mit der besonderen Umgebung umzugehen.

Andere Tipps

Vielleicht könntest du benutzen os.execv anstelle von Popen.

Aus OS/Python -Dokumente:

Diese Funktionen führen alle ein neues Programm aus, Ersetzen des aktuellen Vorgangs; Sie kehren nicht zurück. Bei Unix wird die neue ausführbare Datei in den aktuellen Prozess geladen und verfügt über die gleiche Prozess -ID wie der Anrufer. Fehler werden als Ausnahmen von Oserrror gemeldet.

(Hervorhebung Mine)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top