我正在使用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
有没有办法在脚本中动态更新此值。
RSVP。感谢
答案 0 :(得分:1)
os.putenv()的documentation包含文字:
“......对环境的这种改变会影响子流程的开始 os.system(),popen()或fork()和execv()“
所以,你可以这样做:
bs, err := bcrypt.GenerateFromPassword([]byte("12345"), bcrypt.DefaultCost)
expected := bs
db.Create(&Member{MyField: bs})
var member Member
db.First(&member)
actual := member.MyField
if !bytes.Equal(actual, expected) {
panic("fields are not equal")
}
在fork()调用之后...或(或许更好),如下所示:
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()
(编辑)以下似乎也有效:
module_A.py:
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()
main.py:
import os
import sys
def func_from_module_A():
print os.environ['LANG']
print sys.path
os._exit(0)