bash 배열을 Python 함수에 전달

bash 배열을 Python 함수에 전달

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

파이썬 스크립트:

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 내에서 사용하여 읽을 수 있습니다.

값에 공백이나 개행 문자가 포함될 수 있는 경우 피드백이 약간 까다롭지만 bashPython의 개행으로 구분된 출력을 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

관련 정보