您的脚本可以在导入模块之前检查环境变量的存在/正确性,然后在os.environ中将其设置为缺失,然后调用
os.execv()使用相同的命令行参数重新启动python解释器,但更新的集合的环境变量.
因为潜在的模块导入副作用(如打开的文件描述符或套接字),这可能是任何其他导入(除了os和sys之外),这可能是很难完成关闭的.
此代码设置LD_LIBRARY_PATH和ORACLE_HOME:
#!/usr/bin/python
import os, sys
if 'LD_LIBRARY_PATH' not in os.environ:
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/oracle/XX.Y/client64/lib'
os.environ['ORACLE_HOME'] = '/usr/lib/oracle/XX.Y/client64'
try:
os.execv(sys.argv[0], sys.argv)
except Exception, exc:
print 'Failed re-exec:', exc
sys.exit(1)
#
# import yourmodule
print 'Success:', os.environ['LD_LIBRARY_PATH']
# your program goes here
将环境变量设置为起始环境(在父进程或systemd / etc作业文件中)的一部分可能更为清晰.