Я сделал, чтобы Пайтон функционировал, fooPy (), который возвращает некоторую стоимость. (интервал / удваивается или последовательность),
Я хочу использовать эту стоимость и назначить ее в скрипте оболочки. Например, следующее - функция питона:
def fooPy():
return "some string"
#return 10 .. alternatively, it can be an int
fooPy()
В скрипте оболочки я попробовал следующие вещи, но ни один из них не работает.
fooShell = python fooPy.py
#fooShell = $(python fooPy.py)
#fooShell = echo "$(python fooPy.py)"
Вы можете распечатать ваше значение в Python, как это:
print fooPy()
и в вашем скрипте оболочки:
fooShell=$(python fooPy.py)
обязательно не оставляйте пробелы вокруг =
в Скрипт оболочки.
В вашем коде Python вам необходимо распечатать результат.
import sys
def fooPy():
return 10 # or whatever
if __name__ == '__main__':
sys.stdout.write("%s\n", fooPy())
Затем в оболочке вы можете сделать:
fooShell=$(python fooPy.py) # note no space around the '='
Обратите внимание, что я добавил , если __name__ == '__main __'
Проверьте в код Python, чтобы убедиться, что печать выполняется только в том случае Программа запускается из командной строки, а не при импорте ее из интерпретатора Python.
Я также использовал SYSSTDOUT.WRITE ()
вместо Print
, потому что
Print
имеет разное поведение в Python 2 и Python 3, Sys.Stdout.write ()
вместо Print
В любом случае: -) Вы должны Печать
Значение, возвращенное FOOPY
. Замена оболочки читается из Stdout. Замените последнюю строку своей программы с помощью Print Fapy ()
, а затем используйте второй трубопровод оболочки, который вы упомянули. Он должен работать.
Разработка демонстрация использует Facelets, поэтому я бы даже сказал, что это рекомендуется.
-121--3653544-- Если вы хотите, если вы хотите, если вы хотите, чтобы значение из выписки Python Sysexit
, он будет в специальной переменной оболочке $?
.
$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10