2010-10-17 4 views
12

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

Пример:

foo.sh называет bar.py .... вызов выглядит следующим образом: бар. py $ var1 $ var2 ... $ varn

Затем скрипт python выводит все аргументы с использованием массива sys.argv. Сценарий 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
  • бар .py печатает аргументы он видит с помощью sys.argv
  • 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: Я хочу сказать, «корочки»

+1

, пожалуйста, напишите фактический скрипт bash, было бы намного легче увидеть, что неправильно – tobyodavies

+2

Тогда вы делаете что-то очень не так. Отправьте минимальный код, который обнаруживает проблему. –

+0

Может ли сценарий python печатать что-либо при вызове из сценария bash? НАПРИМЕР. если вы добавите 'print 'wtf" 'в начало' foo.py', вы видите этот вывод при запуске скрипта bash? – intuited

ответ

6

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" 

Это будет распечатать кучу 'привет' строки, если вы запустите скрипт Баш.

+0

@birryee, Да, скрипт имеет + х разрешения ... не уверен, что спрашивает первый вопрос ... – certifiedNoob

-2

У меня есть довольно много точной настройки, которые вы описываете, и это, как моя Баш скрипт выглядит:

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

python my_script.py $VAR1 $VAR2 $VAR3 
1

EDIT:

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

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

в

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

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