Подтвердить что ты не робот

Присвоение значения переменной оболочки с использованием возвращаемого значения функции из Python

У меня есть функция 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)"
4b9b3361

Ответ 1

Вы можете напечатать свое значение в Python, например:

print fooPy()

и в вашей оболочке script:

fooShell=$(python fooPy.py)

Обязательно не оставляйте пробелы вокруг = в оболочке script.

Ответ 2

В вашем коде 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: -)

Ответ 3

Если вы хотите получить значение из инструкции Python sys.exit, оно будет в специальной переменной оболочки $?.

$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10

Ответ 4

Вы должны print значение, возвращаемое fooPy. Замена оболочки читается из stdout. Замените последнюю строку вашей программы на print fooPy(), а затем используйте второй конвейер, который вы упомянули. Он должен работать.