2017-06-23 142 views
0

你好,我嘗試使用python設置環境變量。我的python文件看起來像這樣。使用subshel​​l設置環境變量

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

請看這裏文件檢查是這樣的csh文件。

#!usr/bin/csh 
setenv VARIABLE 1 

但是當我從我的shell環境變量檢查沒有設置。我明白,當我調用os.system時,它會產生另一個子shell並在那裏設置變量。我試着直接運行csh文件和相同的問題。我也試過了。

os.system("setenv VARIABLE 1") 

它會拋出錯誤命令找不到。這是我之前將命令放入diff文件並調用它的原因。

所有我需要做的是設置從我的python腳本在當前shell

+4

您不能。子進程不能改變父進程的環境。 – chepner

+0

相關(將重複,但爲csh和bash之間的區別):https://stackoverflow.com/questions/41708458/assign-environment-variables-from-bash-script-to-current-session-from-python - 注意根據任意內容使用NUL定界流來確保安全。 –

+0

我認爲你想要做的是不可能的 - https://stackoverflow.com/questions/263005/is-it-possible-to-change-the-environment-of-a-parent-process-in-蟒蛇。如果你想爲一個新的shell設置一個環境變量,那麼它看起來像設置'os.environ ['VARIABLE'] = 1'工作。 (至少用'subprocess') – OldGeeksGuide

回答

0

爲什麼你需要從一個Python腳本設置環境變量的環境變量? python腳本可能需要從shell獲取環境變量,但是如果您需要Python中的某個變量,只需使用一個Python變量即可。如果您需要運行另一個需要envirnoment變量的程序,則可以使用以下命令來傳遞它:

os.system('export VARIABLE=1 && echo "$VARIABLE"') 
+0

我試圖自動化一些命令從unix shell運行。所以我需要設置一些環境變量,然後我需要執行一些csh文件。所以我希望做一些像os.system(「setenv VARIABLE 1」)然後os.system(「Something_run」) –

+0

只是在一個命令,它會工作 – MrE

+0

道歉,如果我要求太基本的問題。我對UNIX非常陌生,但我讀到export是shell命令,它使得任何變量都可用於局部變量。所以我的理解是,如果我定義了一個新變量並希望它在「子進程」中可見,那麼我將使用export。但這裏VARIABLE已經在那裏了。當我在shell上輸入setenv時,它會顯示所有變量。 setenv | grep VARIABLE我可以看到它的值爲0.我想將它設置爲1,然後運行另一個文件,說check_run –