2014-09-13 82 views
1

我想設置一個環境變量有Python劇本,影響我開始在腳本外殼。這裏是我的意思如何用Python在當前shell中設置環境變量?

python -c "import os;os.system('export TESTW=1')" 

但命令

echo ${TESTW} 

回報什麼。還有表達式

python -c "import os;os.environ['TEST']='1'" 

它不起作用。

是否有另一種方式來做到這一點的直接意義?還是把變量寫在我從Python腳本的「外部」執行的文件中更好?

回答

1

您可以通過以下方式影響環境:putenv但它不會影響調用者環境,只會影響分叉兒童的環境。 在啓動python腳本之前設置環境真的好多了。

我可能會提出這樣的變體。你創建一個bash腳本和一個python腳本。在bash腳本中,你用params調用python腳本。一個參數 - 一個env變量。例如:

#!/bin/bash 

export TESTV1=$(python you_program.py testv1) 
export TESTV2=$(python you_program.py testv2) 

you_program.py testv1僅返回一個env變量的值。

+0

那麼,在這種情況下,這個python腳本將被用來爲別的東西設置環境。 – Alex 2014-09-13 12:04:12

0

我強烈建議使用由chepner和Maxym(其中Python腳本提供值和您的shell導出變量)提出的解決方案。如果這不是一個選擇,你仍然可以使用eval執行什麼python腳本在當前的Bash過程中寫道:

eval $(python -c "print('export TESTW=1')") 

注意:eval通常讀取bash編程「邪惡」。作爲一般的經驗法則,應該避免「盲目」執行不完全在其控制之下的代碼。這包括在運行時由另一個程序生成,如在這種情況下。另請參閱堆棧溢出問題Why should eval be avoided in Bash, and what should I use instead?

相關問題