我确实有一个setenv.sh
脚本,该脚本在其他几个脚本的开头被调用,其中大多数是bash脚本。显然,此脚本确实设置了一些环境变量,这些脚本稍后会为用户使用。
现在,问题是我想在某些python脚本中实现相同的行为,并且我发现,如果您运行setenv,则不会更新python脚本的环境。
因为我不想创建另一个脚本,该脚本首先调用setenv.sh
myscript.py,另一个调用此myscript.py-我正在寻找一种方法来说服python加载这些变量(解析seteve.h不是一个选择……因为更复杂)。
最简单的解决方案显然是您不需要的解决方案,它是为每个python脚本创建一个新的脚本文件。
但是,您可以通过调用python脚本本身来做大致等效的操作。当然,您需要发信号通知它不要在第二次调用时执行此操作,否则最终将导致无限(尾)递归。
下面的小“模块”(您可以将其导入,但您应该在启动之前立即进行操作,然后再进行其他操作)将检查SETENV
是否已设置环境变量,如果已设置,它将重新发出python命令(尽其所能,因此,如果它不是简单的脚本执行,则可能会出错)SETENV
。它缺乏大量的错误检查功能,因此不应该被认为可以投入生产。而是概念证明:
# file env_set.py
import os
import sys
if sys.argv[0] and "SETENV" in os.environ:
setenv = os.environ["SETENV"]
del os.environ["SETENV"]
os.execvp("bash", ["bash", "-c",
"source " + setenv + "; exec python " + sys.argv[0] + ' "${@}"',
"--"] + sys.argv[1:])
和一点测试:
# file test_env_set.py
import env_set
import os
import sys
for name in sys.argv[1:]:
if name in os.environ:
print(name + "=" + os.environ[name])
else:
print("Undefined: " + name)
# file setenv.sh
export the_answer=42
$ python test_env_set.py SETENV the_answer
Undefined: SETENV
Undefined: the_answer
$ SETENV=setenv.sh python test_env_set.py SETENV the_answer
Undefined: SETENV
the_answer=42
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句