Как передать переменные аргументы из сценария bash в скрипт python

Я пытался решить эту проблему на какое-то время без везения. Корка ситуации заключается в том, что я использую скрипт bash для отправки параметров сценарию aa python:

Пример:

foo.sh вызывает bar.py …. вызов выглядит так: bar.py $ var1 $ var2 … $ varn

Затем скрипт python печатает все аргументы, используя массив sys.argv. Сценарий python корректно работает из командной строки, но при вызове с помощью сценария bash (т.е. foo.sh) я не получаю никакого вывода из bar.py.

Кроме того, я начал foo.sh с опцией «#! / Bin / bash -x» и также просмотрел вывод.

Обобщить:

  • Два скрипта, foo.sh и bar.py
  • foo.sh вызывает bar.py, передавая переменные foo.sh в качестве аргументов bar.py
  • bar.py печатает аргументы, которые он видит, используя sys.argv
  • bar.py работает при запуске со своего терминала, не работает при вызове из foo.sh

Любая помощь была бы потрясающей !!!!

Благодаря!

Редактировать: Привет всем, спасибо за ответы, полный код довольно длинный … но … содержимое двух скриптов можно было бы суммировать

foo.sh _ __ _

#!/bin/bash declare -a list1; declare -a list2; list1=("foo" "bar" "please"); list2=("foo" "bar" "please" "help"); declare -a joined; joined=( $(bar.py "${list1[@]}" "${list2[@]}" ) ); 

bar.py _ __ _

 #!/bin/python import sys for arg in sys.argv: print arg 

Поскольку я предполагаю, что все отступы в python верны (не уверены, как StackOverflow делает это еще :)). Эти два являются ядром проблемы, с которой я сталкиваюсь. Как указано, bar.py правильно печатает аргументы, когда он не вызывается из foo.sh.

PS: Я действительно хотел сказать «корка»,

3 Solutions collect form web for “Как передать переменные аргументы из сценария bash в скрипт python”

Изменить, поскольку код был отправлен

Ваш код делает правильную вещь, за исключением того, что вывод из вашего скрипта bar.py в объединенный массив. Поскольку похоже, что вы не распечатываете содержимое joined , вы никогда не увидите никакого вывода.

Вот демонстрация:

Файл pybash.sh

 #!/bin/bash declare -a list1 declare -a list2 list1=("Hello" "there" "honey") list2=("More" "strings" "here") declare -a joined joined=($(./pytest.py ${list1[@]} ${list2[@]})) echo ${joined[@]} 

Файл pytest.py

 #!/usr/bin/python import sys for i in sys.argv: print "hi" 

При запуске скрипта bash будет напечатано множество строк «привет».

РЕДАКТИРОВАТЬ:

Я понял это, у меня было какое-то переплетение персонажей, линия не была должным образом экранирована. Я изменил его из

var = ($ (некоторые команды))

в

var = (некоторые команды) // использование backticks (все еще изучая SO-редактор …)

Ускорение побега – это поездка! Тем, кто ответил, спасибо за вашу помощь

У меня есть очень точная настройка, которую вы описываете, и так выглядит мой скрипт bash:

 VAR1=... VAR2=... VAR3=... python my_script.py $VAR1 $VAR2 $VAR3 
  • «Pip freeze» предоставляет разные модули из «help (« modules »)»
  • Преобразование скрипта bash в python (маленький скрипт)
  • Игнорирование неудачной ошибки Bash для кода ошибки 141
  • Вывод Python в Консоль внутри подпроцесса из дочернего скребка
  • Как я могу обнаружить разрывы строк DOS в файле?
  • Как вызвать функцию / переменную скрипта оболочки из python?
  • Linux: вычислить один хэш для данной папки и содержимого?
  • Рекурсивно перемещать каталог и заменять вызовы функций
  • передача переменных bash в скрипт python
  • извлекать каждый файл последовательности в виде отдельного файла
  • Изменить рабочий каталог в оболочке с помощью скрипта python
  • Python - лучший язык программирования в мире.