我想创建两个(或更多)线程并在每个线程中执行不同的外部程序,比方说 aaa
和 bbb
。这些外部程序需要位于不同目录的库,比方说在 /aaalib
和 /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)
关于python - 如何在 Python 中设置线程特定的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348556/