我需要将 bash 脚本中定义的数组发送到 python 脚本,该脚本修改并返回该数组。然后需要再次分配给 bash 数组。此外,就像 bash 必须维护数组值而 python 必须修改值一样。
重击脚本:
arr=(0)
ret=`python -c 'from pyscript import fun;print fun(arr)'`
arr = ${ret[@]} # assign returned array from python script to bash array
Python脚本:
def fun(arr):
arr.append(1)
return arr
帮我摆脱这个困境。
答案1
尝试这样的事情:
arr=(0)
ret="$(python -c 'from pyscript import fun;print fun(arr)' "${arr[@]}")"
mapfile -t arr <<<"$ret" # assign returned array from python script to bash array
它假设您的 python 脚本从命令行获取输入并将每个参数存储到 python 数组中arr
。除非您的 python 脚本只是较大程序的一小部分,否则您的代码不会执行此操作。我把这个留给你。这个答案的重点是bash如何将数组传递给python,然后根据python脚本返回的数据对其进行修改。
python 脚本需要将数组打印到 stdout,每个元素用换行符分隔。
@xenoid的建议是使用:
ret="$(python -c 'import sys;from pyscript import fun;print fun(sys.argv[1:])' "${arr[@]}")"
答案2
您可以将数组传递给 Python,将其作为参数添加,并sys.argv[1:]
在 python 内部使用来读取它。
当您的值可能包含空格或换行符时,回馈bash
有点棘手,但您可以将 python 的换行符分隔输出与readline
.
arr=(0)
readarray -t arr < <(python -c '
import sys
arr=sys.argv[1:]
arr.append(1)
arr.append("a b")
for a in arr:
print(a)
' "${arr[@]}")
printf '%s\n' "${arr[@]}"
输出:
0
1
a b