Я решил проблему. Я использовал e4rat для «дефрагментации» (? )приложения. Я сделал приблизительные замеры: 6 минут на загрузку до и около 30 секунд после.
Попробуйте сделать так:
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 должен вывести массив на стандартный вывод, при этом каждый элемент должен быть разделен линией -.
@xenoid предлагает использовать:
ret="$(python -c 'import sys;from pyscript import fun;print fun(sys.argv[1:])' "${arr[@]}")"
Вы можете передать массив в 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