我正在使用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()