Вывод журнала Rundeck не обновляется онлайн для python скриптов - PullRequest
0 голосов
/ 09 июля 2020

Я создаю простое задание в Rundeck, всего с одним шагом сценария bash:

#!/bin/bash

for i in {1..10}
do
   echo "$i"
   sleep 5
done

Вывод журнала для его сборки:

22:26:12    1
22:26:17    2
22:26:22    3
22:26:27    4
22:26:32    5
22:26:37    6
22:26:42    7
22:26:47    8
22:26:52    9
22:26:57    10

Как видите, * Команда 1007 * печатается ровно через 5 секунд после предыдущей echo.

Сейчас Python версия:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time

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

Вывод журнала:

22:29:17    0
22:29:17    1
22:29:17    2
22:29:17    3
22:29:17    4
22:29:17    5
22:29:17    6
22:29:17    7
22:29:17    8
22:29:17    9

На этот раз весь журнал был распечатан сразу после завершения работы.

Есть ли шанс получить такой же способ ведения журнала для скриптов Python, что и для bash?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

По умолчанию python буферизует вывод до завершения. Если вы установите переменную среды PYTHONUNBUFFERED, она не будет буферизоваться, а будет печатать вывод во время выполнения скрипта.

https://www.systutorials.com/how-to-flush-stdout-buffer-in-python/

0 голосов
/ 10 июля 2020

Работает так:

import os
import time

for i in range(10):
   os.system('echo ' + str(i))
   time.sleep(5)

PD: хороший улов.

...