Как читать выходные данные подоболочки, поскольку каждая строка генерируется в bash - PullRequest
1 голос
/ 01 июля 2019

У меня есть скрипт bash, который выглядит следующим образом:

name=""
while read i; do
    if [ -z "$name" ]; then
        name="$i"
    else
        echo "$i"
    fi
done < <(python tmp.py)
echo "$name"

, где tmp.py выглядит примерно так:

import time

for i in range(5):
    print(i)
    time.sleep(.5)

, но проблема в том, что скрипт bash ждетподоболочка python завершается до запуска цикла while.Есть ли способ прочитать выходные данные subshell при генерации каждой строки?Мне нужно иметь возможность изменять внешнюю среду сценариев внутри цикла (например, значение name), чтобы цикл while не мог быть подоболочкой.Я использую Bash 5.0.

1 Ответ

2 голосов
/ 01 июля 2019

Это не скрипт bash, ожидающий вывода, это питон, буферизующий вывод.Сбрасывайте буфер каждый раз, когда вам нужно обработать вывод.

Вы можете сделать это путем изменения кода Python с помощью:

sys.stdout.flush()

или извне, сказав системе выполнитьтолько буферизация строки (или вообще не буферизация):

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