Ответ 1
Вы можете напечатать свое значение в Python, например:
print fooPy()
и в вашей оболочке script:
fooShell=$(python fooPy.py)
Обязательно не оставляйте пробелы вокруг =
в оболочке script.
У меня есть функция Python, fooPy(), которая возвращает некоторое значение. (int/double или string)
Я хочу использовать это значение и назначить его в оболочке script. Например, следующая функция python:
def fooPy():
return "some string"
#return 10 .. alternatively, it can be an int
fooPy()
В оболочке script я пробовал следующие вещи, но никто из них не работает.
fooShell = python fooPy.py
#fooShell = $(python fooPy.py)
#fooShell = echo "$(python fooPy.py)"
Вы можете напечатать свое значение в Python, например:
print fooPy()
и в вашей оболочке script:
fooShell=$(python fooPy.py)
Обязательно не оставляйте пробелы вокруг =
в оболочке script.
В вашем коде 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 '='
Обратите внимание, что я добавил проверку if __name__ == '__main__'
в коде Python, чтобы убедиться, что печать выполняется только тогда, когда ваша программа запущена из командной строки, а не при ее импорте из интерпретатора Python.
Я также использовал sys.stdout.write()
вместо print
, потому что
print
имеет другое поведение в Python 2 и Python 3,sys.stdout.write()
вместо print
: -)Если вы хотите получить значение из инструкции Python sys.exit
, оно будет в специальной переменной оболочки $?
.
$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10
Вы должны print
значение, возвращаемое fooPy
. Замена оболочки читается из stdout. Замените последнюю строку вашей программы на print fooPy()
, а затем используйте второй конвейер, который вы упомянули. Он должен работать.