我在python脚本中设置linux os环境变量。看起来设置不正确。
使用的代码:
import os
from subprocess import call
squid_server_ip = 1.1.1.1
os.chdir("somepath")
call(["pwd"])
os.environ["LD_LIBRARY_PATH="] = ".:$LD_LIBRARY_PATH"
print os.environ['LD_LIBRARY_PATH']
call(["./DUModifier","-httpproxy", "{}:3128".format(squid_server_ip)])
输出:
somepath
/export-path
./DUModifier: error while loading shared libraries: xBase39.so: cannot open shared object file: No such file or directory
手动执行:
cd somepath
export LD_LIBRARY_PATH=.:$LD_LIBRARY
echo $LD_LIBRARY_PATH
.:.:/export-path
./DUModifier -httpproxy 1.1.1.1:3128
DUModifier Release2.1 2018-01-16T04:07:57-05:00
Configuration file to modify: xgDeployConfig.xml
New configurations are:
Option: httpproxy, value: 1.1.1.1:3128
Successfully modified config file: xgDeployConfig.xml
任何人都可以帮我修理
答案 0 :(得分:1)
您必须将环境传递到call()
。像这样:
myenv = {'LD_LIBRARY_PATH': ".:./export-path"}
(正如评论指出的那样,你不能在值中使用$ LD_LIBRARY_PATH:那个bash语法;在python中,你必须使用os.environ['LD_LIBRARY_PATH']
来获取当前值然后在设置myenv
时使用它。然后在通话中使用它:
call(["./DUModifier","-httpproxy", "{}:3128".format(squid_server_ip)], env=myenv)
答案 1 :(得分:0)
你真的必须使用系统env变量吗? 我喜欢使用https://pypi.python.org/pypi/python-dotenv,因此您可以在其中包含已定义变量的本地 .env 文件,并且易于在您的脚本中使用:> 或者您是否有义务使用严格的系统环境?
答案 2 :(得分:0)
此行不正确:
os.environ [“LD_LIBRARY_PATH =”] =“。:$ LD_LIBRARY_PATH”
你应该写:
if os.environ.has_key("LD_LIBRARY_PATH"):
os.environ["LD_LIBRARY_PATH"] = ".:" + os.environ["LD_LIBRARY_PATH"]
else:
os.environ["LD_LIBRARY_PATH"] = "."