Python Jenkins控制台日志出现故障

Python Jenkins控制台日志出现故障,python,jenkins,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 da

我用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---'
之前


是詹金斯臭虫吗?我的詹金斯版本是v1.643,我不认为这是一个bug。如果我记得不太清楚,那么就不能在jenkins shell中打开子进程(即ping命令将独立于python进程运行)。因此,进程按照@knh170所指出的异步运行。

我也有同样的问题,并通过刷新
stdout

在Python2中

print "something" 
sys.stdout.flush()
在Python3中:

print("something", flush=True)

希望这能有所帮助。问题是子进程是异步启动的,如@knh170所述。因此,立即打印输出,而Python将缓冲输出,直到完成为止

您可以尝试使用:
-强制标准输入、标准输出和标准输出完全无缓冲。

#!/usr/bin/python -u
或者,如果调用脚本:

python -u <name>
python-u

应该由异步子进程引起。它的执行时间早于主程序。@knh170 I没有意义,因为如果我在本地计算机上运行此脚本,日志的顺序是正常的。如果我将python脚本包装到一个文件中并从shell调用它,结果是相同的。将脚本包装到另一个文件中并不重要。问题是您正在调用python程序外部的命令(ping),因此python没有运行它,因此它在不同的进程(不同的pid)中运行。在本地计算机上运行脚本时,进程是嵌套的(ping进程是python进程的子进程)。但是,在Jenkins中执行此操作时,进程不是嵌套的,而是独立运行的。Jenkins根据系统配置决定顺序,甚至并行运行它们。