2017-06-23 14 views
0

Hallo Ich habe versucht, Umgebungsvariable mit Python festlegen. Meine Python-Datei sieht so aus.Einstellung Umgebungsvariable mit Subshell

#!/usr/bin/python2.7 
import os 
os.system("check") 

Bitte sehen Sie hier Dateiprüfung ist Csh-Datei, die so etwas ist.

#!usr/bin/csh 
setenv VARIABLE 1 

aber wenn ich aus meiner Shell-Umgebungsvariable überprüfen, ist nicht festgelegt. Ich verstehe, dass wenn ich os.system aufrufen, es eine andere Unterschale macht und Variable dort setzt. Ich versuchte, direkt csh-Datei und das gleiche Problem zu laufen. Ich habe es auch versucht.

os.system("setenv VARIABLE 1") 

es löst Fehler Befehl nicht gefunden. Das war mein früherer Grund, den Befehl in diff-Datei zu setzen und aufzurufen.

Alles, was ich tun müssen, um die Umgebungsvariable aus meinem Python-Skript in aktuell Shell gesetzt

+4

Sie können nicht. Ein untergeordneter Prozess kann die Umgebung seines übergeordneten Elements nicht ändern. – chepner

+0

Related (wäre doppelt, aber für den Unterschied zwischen csh und bash): https://stackoverflow.com/questions/41708458/assign-environment-variables-from-bash-script-to-current-session-from-python - Beachten Sie die Verwendung von NUL-begrenzten Streams für die Sicherheit im Hinblick auf beliebige Inhalte. –

+0

Ich denke, was Sie versuchen zu tun, ist nicht möglich - https://stackoverflow.com/questions/263005/isit-possible-to-change-the-umwelt-of-parent-process-in- Python. Wenn Sie stattdessen versuchen, eine Umgebungsvariable für eine neue Shell festzulegen, sieht es so aus, als würde die Einstellung 'os.environ [' VARIABLE '] = 1' funktionieren. (zumindest mit 'subprocess') – OldGeeksGuide

Antwort

0

warum brauchen Sie eine Umgebungsvariable aus einem Python-Skript zu setzen? Das Python-Skript muss möglicherweise Umgebungsvariablen von der Shell abrufen, aber wenn Sie eine Variable in Python benötigen, verwenden Sie einfach eine Python-Variable. Wenn Sie ein anderes Programm ausführen müssen, das eine Umgebungsvariable akzeptiert, können Sie es immer mit dem folgenden Befehl übergeben:

+0

Ich versuche einige Befehle zu automatisieren, die von der Unix-Shell laufen. Also muss ich eine Umgebungsvariable setzen und dann muss ich eine csh Datei ausführen. Also habe ich gehofft, sowas wie os.system ("setenv VARIABLE 1") zu machen, dann os.system ("Something_run") –

+0

mach es einfach in einem Befehl und es wird funktionieren – MrE

+0

Entschuldigung, wenn ich eine grundlegende Frage stelle. Ich bin ziemlich neu in Unix, aber ich habe gelesen, dass der Export Shell-Befehl ist, der jede Variable nur für lokale Variable verfügbar macht. Also mein Verständnis ist, dass, wenn ich eine neue Variable definiere und möchte, dass sie in "Kind-Prozess" sichtbar ist, dann würde ich exportieren. aber hier ist VARIABLE schon da. Wenn ich setenv on shell eintrage, werden alle Variablen angezeigt. setenv | grep VARIABLE Ich kann sehen, dass sein Wert 0 ist. Ich möchte es auf 1 setzen und dann eine andere Datei ausführen say check_run –