从Jenkins运行Python脚本,无法在Jenkins输出中查看print内容
解决Jenkins中Python脚本print输出不显示的问题
我之前也踩过这个坑!你遇到的情况是典型的输出缓冲或者测试框架捕获输出导致的,给你几个实用的解决办法:
1. 让nosetests不捕获标准输出
nosetests默认会捕获脚本的stdout(也就是print的内容),不会直接输出到Jenkins控制台。只需要在运行命令时加上-s参数:
nosetests -s C:\Users\asafb\PycharmProjects\Sanity_HB_RR_from_Saved_Pos\Check_Newly_Created_Cluster_Monitor.py
-s参数的作用就是禁用nosetests的输出捕获,让print的内容直接显示出来。
2. 关闭Python的输出缓冲
在非交互式环境(比如Jenkins的cmd窗口)中,Python默认会缓冲stdout内容,不会实时打印。解决这个有两种方式:
- 运行脚本时加上
-u参数,和nosetests结合起来就是:nosetests -s -u C:\Users\asafb\PycharmProjects\Sanity_HB_RR_from_Saved_Pos\Check_Newly_Created_Cluster_Monitor.py - 或者在Python脚本开头添加强制刷新的代码:
import sys # 每次print后自动刷新缓冲 sys.stdout.flush() # 也可以全局设置不缓冲 sys.stdout = open(sys.stdout.fileno(), 'w', buffering=1)
3. 提前设置环境变量
在Jenkins的构建步骤中,先设置PYTHONUNBUFFERED环境变量为1,再运行测试命令:
set PYTHONUNBUFFERED=1 nosetests -s C:\Users\asafb\PycharmProjects\Sanity_HB_RR_from_Saved_Pos\Check_Newly_Created_Cluster_Monitor.py
这个环境变量会让Python全程禁用输出缓冲,适合所有Python脚本的场景。
你可以先试试第一种方法(加-s参数),大部分情况下这个就能解决问题。如果还是不行,再结合-u参数或者环境变量设置,应该就能看到print的输出了!
内容的提问来源于stack exchange,提问作者Asaf
相关产品推荐
相关产品推荐

