簡體   English   中英

Python 和環境變量不起作用

[英]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.

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