我有一个调用一个python脚本,像这样一个bash脚本:转换一个Python数据列表一个bash阵列
OUTPUT=$(python /path/path/script.py attr attr attr);
的Python脚本将返回像这样的数据列表:
[item1, item2, item3]
如何将返回的python数据列表的字符串$ OUPUT变量转换为bash数组?
我想阅读bash中的每个项目,如果可能的话。
我有一个调用一个python脚本,像这样一个bash脚本:转换一个Python数据列表一个bash阵列
OUTPUT=$(python /path/path/script.py attr attr attr);
的Python脚本将返回像这样的数据列表:
[item1, item2, item3]
如何将返回的python数据列表的字符串$ OUPUT变量转换为bash数组?
我想阅读bash中的每个项目,如果可能的话。
添加()
和| tr -d '[],'
:
OUTPUT=($(python /path/path/script.py attr attr attr | tr -d '[],'))
echo ${OUTPUT[0]}
echo ${OUTPUT[1]}
echo ${OUTPUT[2]}
echo ${OUTPUT[@]}
输出:
item1
item2
item3
item1 item2 item3
你可以让你的script.py打印一个字符串,用空格分隔每个项目,Bash会将其转换为数组,或者你可以使用Bash将python脚本的返回值转换为你想要的格式。
如果选择打印您script.py一个字符串,你可以使用下面的Python代码:
returnList = [1, 2, 3]
returnStr = ''
for item in returnList:
returnStr += str(item)+' '
print(returnStr)
在这种情况下,以下bash脚本的输出:
OUTPUT=$(python /path/to/script.py)
echo $OUTPUT
for i in $OUTPUT;
do
echo $i
done
是:
1 2 3
1
2
3
希望这可以帮助你。
击声明阵列是这样的:
foo=(bar baz ban)
要转换空间分隔命令输出到阵列可以因此这样做:
foo=($(my_command))
而且转换列表,以空格分隔字符串是很容易在Python:
' '.join(my_array)
如果print
,与其列表本身就可以因此平凡它转换成数组。
我会用一个简短的Python包装器将字符串转换为bash
以上的可解析的东西。
# Proxy for script.py output that includes some potential bash pitfalls
python_output="['a b', 'c*', 6]"
# Let Python output each element of the list as a separate line;
# the only thing this cannot handle is multi-line elements; workarounds
# are possible, but not worth getting into unless necessary.
while read -r; do
OUTPUT+=("$REPLY")
done < <(python -c 'import ast, sys
print "\n".join(str(x) for x in ast.literal_eval(sys.argv[1]))
' "$python_output")
# Verify that each element was added to the array unscathed.
for e in "${OUTPUT[@]}"; do
echo "$e"
done
在bash
4,你可以使用readarray
命令替换while循环:
readarray -t OUTPUT < <(python -c ...)
如果你想简单地创建从蟒蛇Python列表一个bash列表,您可以使用此一个班轮:
my_list = [1, "l", 12]
" ".join([str(elem) for elem in my_list])
它给你:
'1 l 12'
我能够从python中检索字符串,我想知道如何将该字符串转换为bash数组。 – dieheld 2014-10-02 14:01:34
如果您可以修改python脚本来更改其输出,这将使这更容易和更安全,以获得更多可能的输出值。否则,你不得不断言有关输出的内容。 – 2014-10-02 14:02:51
这是我遇到的问题,我不允许改变输出,这是一个尴尬的任务分配给我:( – dieheld 2014-10-02 14:11:35