Как передать массив из python в сценарий оболочки и выполнить его?

У меня есть массив HSPACE который определяется внутри скрипта python. Я пытаюсь передать этот массив в сценарий оболочки «arraytest» и выполнить его из самого python. Я пытаюсь использовать следующий фрагмент кода, но он, похоже, не работает:

 HSPACE=[0.01, 0.009, 0.008, 0.007] subprocess.call(["./arraytest"], HSPACE, shell=True) 

Содержимое сценария оболочки:

 #!/bin/bash for i in ${HSPACE[@]} do echo $i done 

One Solution collect form web for “Как передать массив из python в сценарий оболочки и выполнить его?”

Легким ответом является передача каждой записи массива в виде буквальной записи argv:

 subprocess.call(['./arraytest'] + [str(s) for s in HSPACE], shell=False) 

… после этого …

 #!/bin/bash printf 'hspace array entry: %q\n' "$@" 

Другой подход – передать массив как поток с разделителями NUL на stdin:

 p = subprocess.Popen(['./arraytest'], shell=False, stdin=subprocess.PIPE) p.communicate('\0'.join(str(n) for n in HSPACE) + '\0') 

… и в вашей оболочке:

 #!/bin/bash arr=( ) while IFS= read -r -d '' entry; do arr+=( "$entry" ) done printf 'hspace array entry: %q\n' "${arr[@]}" 
  • Bash, если еще что-то в одной строке с bash-версией sys.exit ()
  • Отправка нескольких команд в оболочку bash, которая должна совместно использовать среду
  • Неожиданное поведение при вложенности вызовов cd с использованием Fabric
  • Извлечение данных из таблицы HTML
  • Как автоматически перезапустить скрипт python при ошибке?
  • Запуск скрипта Python в скрипте оболочки - Проверить статус
  • скрипт linux bash с несколькими питонами
  • Пропустить аргумент bash для скрипта python
  • Python - лучший язык программирования в мире.