如何在Jenkins控制台输出中获取Python打印结果

13
我有一个打印字符串的Python脚本。现在在Jenkins中运行它时,我没有在Jenkins Builds'控制台输出中看到打印的字符串。是否有解决方法?

1
请访问https://dev59.com/tmgu5IYBdhLWcg3wCCtK。 - Federico
4个回答

20

在运行Python脚本时,尝试使用-u(无缓冲)选项。

python -u my_script.py


5
任何由Jenkins启动的进程输出到stdout都应该被控制台输出捕获。但需要注意的是,除非打印了换行符,否则不会显示输出内容,请确保您的每一行都以换行符结束。
如果您以某种奇怪的方式启动Python并将其与Jenkins父进程分离,则我无法提供帮助。

谢谢。它解决了我的问题。我使用 sys.stdout.write('\r foo bar')sys.stdout.flush() 在同一行上打印循环的日志。在我的控制台中,它按预期工作。但是在 Jenkins 控制台输出中,日志直到全部完成后才显示。现在我测试环境变量 BUILD_NUMBER 的值,以使用 sys.stdout.write 或只是 print - ElpieKay

2

我认为你需要做的是刷新(flush),尝试:

import sys
sys.stdout.flush()

它应该有所帮助。


0

接受的答案让我找到了正确的方向,但在我的情况下,Jenkins正在运行的shell脚本将python脚本的输出捕获到变量中的子shell中,即a = $(python_script),因此它没有被回显......

为了解决这个问题,我只需将日志记录到stderr而不是stdout,即:

import sys
sys.stderr.write("my info\n")
sys.stdout.flush()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接