[英]Python and environment variables not working
在 Ubuntu 上的 Docker 容器中,我正在運行一個調用python3 my_script_file.py
的.sh
文件。 在那個文件中,我這樣做:
commands = []
commands.append("export OMP_NUM_THREADS=4")
commands.append("echo $OMP_NUM_THREADS")
然后我執行命令數組:
def execute_commands_list(commands, no_bash_script = False):
for command in commands:
if not no_bash_script and gc.output_to_bash_script:
write_command_to_bash_script(command)
else:
print(" [ " + command + " ]")
ret = subprocess.call(command, shell=True, executable="/bin/bash")
assert ret==0 or ret==2, "bash return code error: " + str(ret) + " " + command
這是輸出:
[ export OMP_NUM_THREADS=4 ]
[ echo $OMP_NUM_THREADS ]
(這是一個空行)。 我自己執行后嘗試在終端中運行 echo $OMP_NUM_THREADS ,但一無所獲。 如果我手動運行這兩個命令,則會設置 env var。
(我也試過 os.environ,但也失敗了)
我錯過了什么?
(作為參考,.sh 文件是:)
#!/bin/bash -p
python3 my_script_file.py
這可能是因為export
的范圍僅限於它正在運行的當前 shell。 這意味着只有subprocess
運行的 shell,這個環境變量才可見。
如果你想讓這個環境變量全局公開,並且你是從某種 Linux 機器上運行的,我建議將它以KEY=VALUE
的格式寫入/etc/environment
。
例如在你的情況下,而不是
export OMP_NUM_THREADS=4
替換為:
echo OMP_NUM_THREADS=4 >> /etc/environment
筆記! 由於environment
位於/etc
下,很有可能將其權限設置為僅允許寫入 sudo 用戶,因此請確保將其包含在subprocess
調用中。
您可以使用以下內容:
echo 'OMP_NUM_THREADS=4' | sudo tee -a /etc/environment > /dev/null
tee
將文本打印到標准輸出。 為了使其靜音,使其行為更類似於 shell 附加 ( >>
),請將 stdout 路由到/dev/null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.