Как разделить поток stdout в реальном времени на несколько файлов? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть скрипт на python, который непрерывно записывает поток текста в стандартный вывод.Примерно так (genstream.py):

   while 1:
    print (int(time.time()))
    time.sleep(1)

Я хочу скрипт bash, который запускает скрипт python, сохраняет его вывод в набор файлов, скажем, чтобы разделить вывод каждый час, чтобы избежать созданияогромного файла, которым сложно управлять.

Созданные таким образом файлы будут затем обрабатываться (т. е. один в конце каждого часа) тем же сценарием bash для вставки значений в базу данных и перемещаться впапка архива.

Я выполнил поиск в Google / стек переполнения (например, разделить STDIN на несколько файлов (и сжать их, если это возможно) Bash чтения потока STDOUT в режиме реального времени или https://unix.stackexchange.com/questions/26175/), но я пока не нашел никакого решения.

Я пытался использовать что-то простое, как это (так, не принимая во внимание время, но только числолиний)

python3 ./genstream.py | split -l5 -

но у меня нет вывода.

Я пробовал комбинацию (именованных) труб и тройника, но, похоже, ничего не работает.

1 Ответ

0 голосов
/ 18 апреля 2019

Попробуйте это:

python3 ./genstream.py | while read line; do
  echo "$line" >> split_$(date +%Y-%m-%d-%H)
done
...