我想创建两个(或更多)线程,并在每个线程中执行不同的外部程序,比方说aaa
and bbb
。这些外部程序需要位于不同目录中的库,比方说/aaalib
and /bbblib
,所以我必须设置环境变量LD_LIBRARY_PATH
在执行它们之前。我想避免使用 shell,所以解决方案如执行LD_LIBRARY_PATH=/aaalib aaa
不太好。
问题是:我该如何设置os.environ['LD_LIBRARY_PATH']
以这样的方式它在不同的线程中有不同的值?
附言。我尝试了解决方案os.environ['...'] = threading.local()
描述here,但它以下列方式失败:
In [1]: import os, threading
In [2]: os.environ['LD_LIBRARY_PATH'] = threading.local()
-----------------------
TypeError Traceback (most recent call last)
<ipython-input-2-a2c8ef0b901b> in <module>()
----> 1 os.environ['LD_LIBRARY_PATH'] = threading.local()
/usr/lib/python2.7/os.pyc in __setitem__(self, key, item)
471 self.data = environ
472 def __setitem__(self, key, item):
--> 473 putenv(key, item)
474 self.data[key] = item
475 def update(self, dict=None, **kwargs):
TypeError: must be string, not thread._local
你可以尝试使用subprocess
模块并执行如下操作:
import subprocess
import os
env = os.environ.copy()
env['LD_LIBRARY_PATH'] = '/aaalib'
aaa_process = subprocess.Popen(['aaa'], env=env)
env = os.environ.copy()
env['LD_LIBRARY_PATH'] = '/bbblib'
bbb_process = subprocess.Popen(['bbb'], env=env)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)