Jenkins控制台日志不按顺序

时间:2016-03-31 08:08:02

标签: python jenkins

我在jenkins中编写了一个python脚本,如下所示:

import subprocess, shlex

def command(cmd):
    return subprocess.call(shlex.split(cmd))

print '--- Begin ---'
command('ping -i 1 -c 3 192.168.1.2')

但jenkins中的控制台登录如下:

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_req=1 ttl=63 time=0.426 ms
64 bytes from 192.168.1.2: icmp_req=2 ttl=63 time=0.347 ms
64 bytes from 192.168.1.2: icmp_req=3 ttl=63 time=0.354 ms

--- 192.168.1.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.347/0.375/0.426/0.042 ms
--- Begin ---

为什么PING的日志显示在print '--- Begin ---'之前?

这是一个jenkins bug吗?我的jenkins版本是v1.643

3 个答案:

答案 0 :(得分:3)

我不认为这是一个错误。如果我记不清楚,你就无法在jenkins shell中打开子进程(即ping命令将独立于python进程运行)。因此,进程以@ knh170指向的方式异步运行。

答案 1 :(得分:1)

我遇到了同样的问题,并通过刷新stdout

来修复它

在Python2中

print "something" 
sys.stdout.flush()

在Python3中:

print("something", flush=True)

希望这有帮助

答案 2 :(得分:1)

问题是子进程是像@ knh170提到的那样异步启动的。因此,输出立即打印,而Python正在缓冲输出,直到完成。

您可以尝试使用: -u Force stdin, stdout and stderr to be totally unbuffered.

#!/usr/bin/python -u

或者如果你调用脚本:

python -u <name>