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 script
path 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 ?!
Haben Sie versucht, 'export PYTHONPATH' zu sagen, bevor Sie das Python-Skript starten, das Popen aufruft? Dadurch werden untergeordnete Prozesse diese Variable erben. –
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
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