【问题标题】:calling bash configuration files in python script to setup environmental variables [duplicate]在 python 脚本中调用 bash 配置文件来设置环境变量
【发布时间】:2015-10-04 13:28:53
【问题描述】:

我有一个文本文件,其中包含属于可以在bash 脚本中调用的一组命令的所有路径,它被称为progs.ini。 通常当我想在我的 bash 脚本中调用这个配置文件时,我会使用这个命令

. progs.ini

progs.ini 包含如下内容:

BIN=/bin/linux_64/
P_ANALYSE=${BIN}/analyse
NPARA=1

现在我想在 python 中使用我的部分代码,我尝试使用以下命令:

import subprocess as S
import os
CMD='. progs.ini'
S.call([CMD],shell=True)

它不返回任何错误消息但它无法识别progs.ini中定义的变量

>>os.system('echo ${BIN}')

0

这不是设置一些类似于this problem 的环境变量。我想使用配置文件设置一些变量。

【问题讨论】:

  • subprocessos.system 运行的 shell 进程是不相关的。它们不共享任何状态。
  • @EtanReisner 那么与这个问题有什么关系呢?
  • 没有。我的意思是它们彼此无关。您实际上只是运行bash -c '. progs.ini'; bash -c 'echo $BIN' 并想知道为什么该变量不起作用。这两个命令不共享任何状态。它们不共享变量等。它们是完全不同的过程。
  • @EtanReisner 有什么方法可以在我的 python 脚本中设置这些变量,而无需重新编写它们?

标签: python bash operating-system subprocess


【解决方案1】:

您似乎在使用 Linux。在这种情况下,我倾向于在您的 ini 文件末尾放置一个cat /proc/$$/environ。这将以易于解析的格式打印出所有键值对。应该这样做:

s = os.popen(". whatever.ini && cat /proc/$$/environ").read()
env_vars = {x[:x.find("=")]:x[x.find("=")+1:] for x in s.split("\00")[:-1]}

经过测试。这没有用,但这样做了:

s = os.popen(". ./whatever.ini && set").read()
env_vars = {x[:x.find("=")]:x[x.find("=")+2:-1] for x in s.split("\n")[:-1]}
print env_vars['hello']

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 2016-10-07
    • 2013-11-15
    • 2012-01-12
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多