使用python脚本在linux中设置环境路径

时间:2018-01-15 21:13:12

标签: python linux python-2.7 unix

我在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

任何人都可以帮我修理

3 个答案:

答案 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"] = "."