2017-03-29 2 views
0

Ich habe ein tcsh-Shell-Skript, das alle erforderlichen Umgebungen einrichtet, einschließlich PYTHONPATH, die dann am Ende eine ausführbare Datei ausführen. Ich habe auch ein Python-Skript, das als Eingabe an das Shell-Skript gesendet wird. So funktioniert die folgende völlig in Ordnung, wenn es vom Terminal läuft ist:Subprozess, der nicht alle Umgebungsvariablen enthält

path to shell scriptpath to python script

Nun, das Problem tritt auf, wenn ich die gleiche Sache von einem subprocess tun will. Das Python-Skript kann nicht ausgeführt werden, da es viele der Module nicht finden kann, die bereits über das Shell-Skript gesetzt werden sollen. Und klar, die PYTHONPATH endet mit vielen fehlenden Pfaden im Vergleich zu der übergeordneten Umgebung, aus der der Subprozess lief, oder dem Shell-Skript selbst! Es scheint, als würde der Subprozess die Umgebung, die das Shell-Skript einrichtet, nicht respektieren.

Ich habe schon alle möglichen Dinge ausprobiert, aber keine hilft!

cmd = [shell_script_path, py_script_path] process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ.copy()) Es macht keinen Unterschied, ob auch env nicht angegeben ist!

Irgendeine Idee, wie man das repariert ?!

+0

Haben Sie versucht, 'export PYTHONPATH' zu sagen, bevor Sie das Python-Skript starten, das Popen aufruft? Dadurch werden untergeordnete Prozesse diese Variable erben. –

+0

Die Umgebung, aus der Popen läuft, enthält bereits alle diese Pfade! Oder wolltest du PYTHONPATH aus der Shell exportieren? Das Shell-Skript legt die Umgebung selbst fest. – Yasin

+0

Egal was ich mache, ich bekomme immer ImportErrors und Fehler wie diese "Import Site" ist fehlgeschlagen; Verwenden Sie -v für die Rückverfolgung – Yasin

Antwort

0

Wenn Sie wissen, dass der Unterprozess die gesamte übergeordnete Prozessumgebung erbt und sie unter derselben Umgebung ausgeführt werden sollen, wurde das Shell-Skript so eingerichtet, dass keine Umgebung eingerichtet wird.

Dies löst die Umgebung beibehalten, aber jetzt ist das Problem, der Prozess hängt nur! (es passiert nicht, wenn es direkt von der Shell ausgeführt wird)

Verwandte Themen