簡體   English   中英

通過 python 腳本設置 shell 環境變量

[英]Set shell environment variable via python script

我有一些需要環境變量的儀器,我想從 python 代碼自動設置它。 所以我嘗試了幾種方法來實現它,但都沒有成功。 這里有些例子:

  1. 我在我的 python 腳本中插入以下代碼

     import os os.system("export ENV_VAR=/some_path")
  2. 我創建了 bash 腳本(env.sh)並從 python 運行它:

     #./bin/bash export ENV_VAR=some_path #call it from python os.system("source env sh")
  3. 我也試過os.putenv()os.environ*["ENV_VAR"] = "some_path"

是否可以使用 python 設置(導出)環境變量,即不直接將其導出到 shell?

設置環境變量僅為當前進程及其啟動的任何子進程設置它。 因此,使用os.system將僅為正在運行以執行您提供的命令的 shell 設置它。 當該命令完成時,shell 消失,環境變量也消失。 使用os.putenvos.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*esubprocess.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM