python - Python和环境变量不起作用
问题描述
在 Ubuntu 上的 Docker 容器中,我正在运行一个.sh
调用python3 my_script_file.py
. 在那个文件中,我这样做:
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 机器上运行的,我建议你/etc/environment
以KEY=VALUE
.
例如,在您的情况下,而不是
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 附加 ( >>
),请将标准输出路由到/dev/null
.
推荐阅读
- python - 来自 open ai 安装的 Atary 示例
- c# - 如何使用 HotChocolate 和 EFCore 创建 GraphQL 部分更新
- c - 如何使用 c 中的指针解决此问题?
- c - 如何计算C中结构数组的总内存需求?
- python - 使用给定的参数化
- python - 使用 CSV 文件访问 Python 3 中的数据?
- forms - 通过函数在powershell中更改变量值的问题
- node.js - 我可以将 MERN 应用程序上传到 bluehost 服务器并运行吗?
- macos - 通过 LAN 从 Linux 到 Mac 的 X11 远程(无 ssh 转发)加速
- android - Retrofit2 不使用完整的基本网址