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

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

пример:

foo.sh звонки-бар.пы....вызов выглядит так: bar.py переменной $var1, $var2 будет ... $ varn

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

кроме того, я начал foo.sh с "#!/bin / bash-x" вариант и наблюдал за выходом, а также.

подведем итоги:

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

любая помощь будет здорово!!!!

спасибо!

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

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 ответов


Edit, так как код был опубликован

ваш код делает правильную вещь - за исключением того, что выход из своего bar.py скрипт захватывается в массив joined. Поскольку похоже, что вы не распечатываете содержимое 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-скрипт.


EDIT:

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

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

до

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

Bash escaping-это какая-то поездка lol! Тем, кто ответил, Спасибо за всю вашу помощь


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

VAR1=...
VAR2=...
VAR3=...

python my_script.py $VAR1 $VAR2 $VAR3