присваивание значения переменной оболочки с использованием возвращаемого функцией значения из Python - PullRequest
12 голосов
/ 22 января 2010

У меня есть функция Python, fooPy (), которая возвращает какое-то значение. (int / double или string)

Я хочу использовать это значение и назначить его в сценарии оболочки. Например, следующая функция python:

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)"

Ответы [ 4 ]

34 голосов
/ 22 января 2010

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

print fooPy()

и в вашем сценарии оболочки:

fooShell=$(python fooPy.py)

Не забудьте оставить пробелы вокруг = в сценарии оболочки.

11 голосов
/ 22 января 2010

В вашем коде 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 в любом случае: -)
5 голосов
/ 22 января 2010

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

$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10
3 голосов
/ 22 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...