这个问题以前在这里被问过,但当我试图模仿正确答案时,我遇到了一个关键错误,我想知道我做错了什么。
我有一个shell脚本,可以在家中创建一个目录:
#!/bin/sh
#choose path to home
directory=~/.some_file
if [ ! -d "$directory" ]
then mkdir "$directory"
fi
#I then export the variable
export directory
然后我转到我的python脚本,我想使用shell脚本中的变量目录作为python脚本中的同一变量
#!/usr/bin/env python3
import os
variable = os.environ["directory"]
print(variable)
当我运行python文件时,我得到一个错误
File "/home/user/import_sh_var.py", line 5, in <module>
variable = os.environ["directory"]
File "/usr/lib/python3.8/os.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'directory'
所以我假设我从错误消息中为变量返回了None,但为什么呢?我一定从根本上误解了"出口"在外壳中的作用
我不知道这是否重要,但我正在使用zsh
如果在shell脚本中定义环境变量并将其导出,则在同一shell脚本中启动的Python程序将能够看到脚本中导出的环境变量。请考虑下面这两个骨架脚本。这是setvar.sh
:
#! /bin/bash
export B=10
./getvar.py
这个是getvar.py
:
#! /usr/bin/env python3
import os
print(os.environ["B"])
然后运行setvar.sh
:
$ ./setvar.sh
10
至少在bash下,输出是预期的。即:getvar.py
继承了setvar.sh
定义的环境。