![](/img/trans.png)
[英]Set Environment Variable in Windows shell through Python Script
[英]Set shell environment variable via python script
我有一些需要環境變量的儀器,我想從 python 代碼自動設置它。 所以我嘗試了幾種方法來實現它,但都沒有成功。 這里有些例子:
我在我的 python 腳本中插入以下代碼
import os os.system("export ENV_VAR=/some_path")
我創建了 bash 腳本(env.sh)並從 python 運行它:
#./bin/bash export ENV_VAR=some_path #call it from python os.system("source env sh")
我也試過os.putenv()
和os.environ*["ENV_VAR"] = "some_path"
是否可以使用 python 設置(導出)環境變量,即不直接將其導出到 shell?
設置環境變量僅為當前進程及其啟動的任何子進程設置它。 因此,使用os.system
將僅為正在運行以執行您提供的命令的 shell 設置它。 當該命令完成時,shell 消失,環境變量也消失。 使用os.putenv
或os.environ
設置它具有類似的效果; 環境變量是為 Python 進程及其任何子進程設置的。
我假設您正在嘗試為啟動腳本的 shell 或全局設置這些變量。 這是行不通的,因為 shell(或其他進程)不是您在其中設置變量的 Python 腳本的子進程。
在 shell 腳本中設置變量會更好。 如果您隨后獲取該腳本(以便它在source
的當前實例中運行,而不是在子 shell 中運行),那么它們將在腳本結束后保持設置。
只要您從相同的過程中啟動“儀器”(我想是一個腳本),它就應該可以工作:
In [1]: os.putenv("VARIABLE", "123") In [2]: os.system("echo $VARIABLE") 123
您不能更改不同進程或父進程的環境變量。
shell function 可以做到這一點。 您需要打印您的導出語句並對其進行評估。
set_shell_env() { output=$(python print_export_env.py $*) eval $output }
根據您執行儀器的方式,您可能能夠專門為子進程更改環境而不影響父進程。 請參閱os.spawn*e
或subprocess.Popen
的文檔,它們接受表示子環境的單獨參數。 例如,在提供兩種用法的subprocess
模塊文檔中替換 os.spawn 系列:
環境示例:
os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) ==> Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.