Как передать переменные аргументы из скрипта 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