Вызов python из оболочки и захват вывода


Я написал программу в оболочке. И внутри этого скрипта, я вызываю скрипт Python. Это прекрасно работает. Я хочу, чтобы мой скрипт python вернул выходные данные скрипту shell. Возможно ли это? (Я не получил никакого такого способа в google). Скажите, пожалуйста, как это сделать, если это возможно?

test.sh

#!/bin/bash
python call_py.py

И скрипт python(call_py.py)

#!/usr/bin/python
if some_check:
    "return working"
else:
    "return not working"

Как мне вернуться из python и поймать в shell?

2 4

2 ответа:

Чтобы получить выходные данные команды в переменной, используйте подстановку процесса:

var=$( cmd )

Например

var=$( ls $HOME )

Или

var=$( python myscript.py)

В $ () - это (почти) в точности эквивалентно, используя обратные кавычки, обратные кавычки, но синтаксис является устаревшим и $() является предпочтительным.

Если вы хотите вернуть строку "работает" или "не работает" и использовать это значение в сценарии оболочки, чтобы определить, был ли сценарий python успешным, измените свой план. Гораздо лучше использовать возвращаемое значение. например, в python вы "возвращаете 0" или "возвращаете 1" (ноль для успеха, 1 для неудачи), а затем скрипт оболочки просто:

if python call_py.py; then
  echo success
else
  echo failure
fi

Используйте $(...) для записи stdout команды в виде строки.

output=$(./script.py)
echo "output was '$output'"

if [[ $output == foobar ]]; then
    do-something
else
    do-something-else
fi