我有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']
,我就是这样了。
但是,当我进入下一个级别时,有几个问题。
我想使用列表元素,所以此时我需要使用sed
在我不想要的bash文件中解析它,而我喜欢访问{{1}作为bash中的数组,以便我以后可以使用它。
目前我正在打印list
,但我不能总是那样做。因为我的python文件中可能有多个list
,而我只是无法打印它们并从bash中检索它。所以,我可以以某种方式将变量从python返回到bash,我正在搜索来自另一个list
文件的source
bash
文件。
最终我希望在bash
文件中有多个函数,并尝试从bash访问特定函数的返回值。我能做到吗?就像调用整个python
文件一样,我可以从python
文件中调用特定的function
吗?
答案 0 :(得分:2)
您不需要使用sed来解析python脚本的输出。
在打印输出之前的python脚本中,将列表转换为空格分隔的字符串(希望列表中没有任何带有空格的项目)
print " ".join(lst)
此输出可以在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函数是什么)
#! /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