Python 3.4 针对不同的进程更改了ld_library_path



我正在使用python多处理模块在单独的进程中调用python函数,我希望环境变量$LD_LIBRARY_PATH此进程的不同值。具体来说,我需要在进程引用现有值之前将字符串附加到现有值。示例代码如下所示:

import os
from multiprocessing import Process
import sys
orig_env = os.environ['LD_LIBRARY_PATH']
def startProc_A():
   a_env = orig_env + 'path/1'
   os.environ['LD_LIBRARY_PATH'] = a_env
   print(os.environ['LD_LIBRARY_PATH'])
   sys.path.append('path/1')
   new_proc = Process(target = func_A, args=(0,))
   new_proc.start()
def func_A():
   import module_A

在 print 语句中,我可以看到os.environ['LD_LIBRARY_PATH']已正确更新,但是,我的进程仍然引用了 python 启动时的值,这意味着module_A仍然引用旧LD_LIBRARY_PATH

有没有办法在脚本中动态更新此值。

回复。谢谢

os.putenv(( 的文档包含以下文本:

"...对环境的这种更改会影响从 os.system((, popen(( or fork(( and execv((">

所以,你可以这样做:

import os
def func_A():
    print os.environ['LANG']
    os._exit(0)  
orig_env = os.environ['LANG']
a_env = orig_env + 'something_else'
os.environ['LANG'] = a_env    
newpid = os.fork()
if newpid == 0:   # this is the child process
    func_A()

。或者(也许更好(在 fork(( 调用之后,如下所示:

import os
def func_A():
    print os.environ['LANG']
    os._exit(0)  

newpid = os.fork()
if newpid == 0:   # this is the child process
    orig_env = os.environ['LANG']
    a_env = orig_env + 'something_else'
    os.environ['LANG'] = a_env    
    func_A()

(编辑(以下方法似乎也有效:

module_A.py:

import os
import sys
def func_from_module_A():
    print os.environ['LANG']
    print sys.path
    os._exit(0)  

main.py:

import os
import sys
def startProc_A():
    newpid = os.fork()
    if newpid == 0:   # this is the child process
        orig_env = os.environ['LANG']
        a_env = orig_env + 'something_else'
        os.environ['LANG'] = a_env
        sys.path.append("road_to_nowhere")
        func_A()
def func_A():
    import module_A
    module_A.func_from_module_A()
startProc_A()

相关内容

  • 没有找到相关文章

最新更新