python 个脚本的 Rundeck 日志输出未在线刷新

Rundeck log output isn't refreshed online for python scripts

我在 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

如您所见,echo 命令在前一个 echo.

正好 5 秒后打印

现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 脚本相同的日志记录方式?

它的工作原理是这样的:

import os
import time

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

PD:收获不错。

默认情况下,python 缓冲输出直到完成。如果设置 PYTHONUNBUFFERED 环境变量,它不会缓冲,而是在脚本运行时打印输出。

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