首页 > 解决方案 > 使用 bash 脚本导出的环境变量在 python 中无法访问

问题描述

我有两个文件:

  1. 运行.sh
  2. 火车.py

run.sh 中两个文件的内容

export TRAINING_DATA=test1
export FOLD=test2
python.exe train.py

在火车.py

from os import environ
print(environ.get("TRAINING_DATA"), environ.get("FOLD"))

当我通过命令行运行 bash 文件时

bash run.sh

我没有得到 test1 和 test2,而是得到了 None,None 这两个文件都放在我的 virtualenv 的 Scripts 文件夹中。我正在使用 Windows 10。

标签: python-3.xbashwindows-subsystem-for-linux

解决方案


您遇到的问题是您正在运行 windows 版本的 python.exe 而不是 linux/bash 版本。

在 run.sh 中,我看到您指的是 python.exe,这是 Windows exe,因此当它运行时,它与用于调用它的 .sh 脚本不在同一个 shell 中。

您可以通过在 WSL 中执行以下操作来向自己证明这一点

➜  which python.exe
/mnt/c/Python27/python.exe
➜  which python
/usr/bin/python

因此,只要您在 WSL 中安装了 python,您就可以简单地将 .sh 脚本中的 .exe 换掉,这样您就可以使用 bash/linux 版本:

export TRAINING_DATA=test1
export FOLD=test2
python train.py

推荐阅读