擅长:python、mysql、java
<p>在导入模块之前,脚本可以检查环境变量的存在性/适当性,然后在os.environ中设置它(如果缺少),然后调用<a href="https://docs.python.org/2/library/os.html#os.execv" rel="noreferrer">os.execv()</a>重新启动python解释器,该解释器使用的命令行参数与更新的环境变量集相同。</p>
<p>这仅在</em>任何其他导入(os和sys除外)之前才建议<em>,因为可能存在模块导入的副作用,如打开的文件描述符或套接字,这可能对干净地关闭造成挑战。</p>
<p>此代码设置LD_LIBRARY_PATH和ORACLE_HOME:</p>
<pre><code>#!/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
</code></pre>
<p>将该环境变量设置为启动环境的一部分(在父进程或systemd/etc作业文件中)可能更干净。</p>