如何解决这个bash-python交互?

如何解决这个bash-python交互?,python,bash,Python,Bash,我有3个文件,让我们逐一查看 params.conf [a] [b] [c] [d] [e] parsing.py from ConfigParser import SafeConfigParser parser = SafeConfigParser() parser.read('params.conf') lst=parser.sections() print lst demo.sh #! /bin/bash value=$(python parsing.py) echo "$valu

我有3个文件,让我们逐一查看

params.conf

[a]
[b]
[c]
[d]
[e]
parsing.py

from ConfigParser import SafeConfigParser

parser = SafeConfigParser()
parser.read('params.conf')

lst=parser.sections()
print lst
demo.sh

#! /bin/bash
value=$(python parsing.py)
echo "$value"
运行
demo.sh
后,我应该会得到输出
['a'、'b'、'c'、'd'、'e']
,我得到了

但是,当我进入下一个层次时,有几个问题

  • 我想使用list元素,所以现在我需要使用
    sed
    在bash文件中解析它,我不希望这样,我更喜欢在bash中以数组的形式访问
    list
    ,以便以后使用它

  • 目前我正在打印一个
    列表
    ,但我不能总是这样做。因为我的python文件中可能有多个
    列表
    ,而我就是负担不起打印每个列表并从bash检索它们。因此,我可以从python返回一个变量到bash吗?不知何故,我正在从另一个
    bash
    文件中搜索类似
    source
    a
    bash
    的hack文件

  • 最后,我希望在我的
    python
    文件中有多个函数,并尝试从bash访问特定的函数返回值。我能做到吗?就像调用整个
    python
    文件一样,我可以从
    python
    文件调用特定的
    函数


您不需要使用sed来解析python脚本的输出

在python脚本中,在打印输出之前,将列表转换为以空格分隔的字符串(希望列表中没有空格的项)

这个输出可以很容易地在shell中循环。 对于我来说,下面的代码给出了以下输出

#! /bin/bash
lst=$(python parsing.py)
for i in $lst
do
    echo $i
done
params.conf与您的相同

输出

a
b
c
d
e
希望这能帮助你解决一些问题

也可以从shell脚本调用python中的特定函数,如下所示

多功能python文件

import sys

def foo():
    print 'i am foo'

def func():
    print 'i am func'

def bye():
    print 'i am bye'

if __name__ == "__main__":
    if len(sys.argv)==2:
        x = getattr(sys.modules[__name__], sys.argv[1])
        x()
和shell脚本(我使用命令行参数来命名python函数)

输出

# ./demo.sh foo
i am foo
# ./demo.sh func
i am func
# ./demo.sh bye
i am bye

谢谢你的回答。真是帮了大忙,+1。
#! /bin/bash
echo $(python params.py $1)
# ./demo.sh foo
i am foo
# ./demo.sh func
i am func
# ./demo.sh bye
i am bye