Linux下使用Python设置环境变量后bash无法访问问题咨询
问题根本原因
Linux系统中每个进程的环境变量是独立隔离的,遵循以下继承规则:
- 子进程启动时,只会复制父进程的环境变量作为初始值
- 子进程对自身环境变量的任何修改,都只会作用于自身、以及它后续启动的新子进程,完全不会反向影响父进程,也不会影响其他无关进程
你写的Python脚本是你当前bash进程启动的子进程,你用os.environ修改的只是Python进程自己的环境变量,自然不可能在父bash进程里查到这些变量。
对应解决方案
根据你的使用场景,可以选择以下实现方式:
- 如果你只需要在Python脚本后续启动的子进程中使用这些变量:当前写法逻辑可用,不需要额外调整,脚本内通过
os.system/subprocess启动的进程可以正常读取到你设置的环境变量。 - 如果你需要让当前运行的bash会话读取到这些变量:
- 把Python脚本改为单次执行,输出对应export语句,示例修改如下:
import board from adafruit_htu21d import HTU21D i2c = board.I2C() sensor = HTU21D(i2c) tempc = sensor.temperature tempf = (tempc * 9 / 5) + 32 humid = sensor.relative_humidity print(f"export AMBIENT_TEMPC='{tempc}'") print(f"export AMBIENT_TEMPF='{tempf}'") print(f"export AMBIENT_HUMID='{humid}'")- 在bash中执行
eval $(python3 你的脚本路径.py),即可将这些变量导入到当前shell会话中。
- 如果你需要持续更新传感器值,供多个进程随时读取:
不要用环境变量实现,改为将最新值写入临时文件,比如Python脚本每秒把上述export语句写入/tmp/ambient_sensor.env,其他进程需要读取时执行source /tmp/ambient_sensor.env即可拿到最新值。
你现有脚本的额外问题
os.environ要求所有键值都必须是字符串类型,你现在直接将数值类型的AMBIENT_TEMPF、AMBIENT_HUMID赋值给os.environ,运行时会抛出类型错误,必须转为字符串后再赋值。
内容的提问来源于stack exchange,提问作者addohm
相关产品推荐
相关产品推荐

