我有一个主构建脚本,每个jenkins作业都会执行。此主脚本获取作业名称(来自Jenkins),然后执行该作业名称的相关脚本。现在,我正在使用subprocess.check_output来调用相关的脚本。我想的是,我应该只导入脚本,然后调用里面的函数。我这样导入它:
sys.path.insert(0,os.path.abspath(importLocation))
print("path", sys.path, os.path.abspath(importLocation))
import build
我还尝试使用insert(-1,...)将它放在最后。我使用它的方式是在执行此函数之前我在主脚本中有几个print语句。
print("Starting script...")
build.run()
这在控制台上工作正常,因为它在运行之前显示“Starting script”。不幸的是,在Jenkins中,它总是在显示build.run()的输出之前在主脚本中显示任何内容。我甚至尝试将build.run()置于最底层,使用if语句等。
关于如何以正确的顺序在Jenkins中运行/显示任何想法?
答案 0 :(得分:0)
子进程在退出时刷新其输出缓冲区,但父进程的打印仍在父缓冲区中。解决方案是在运行子缓冲区之前刷新父缓冲区:
print("Starting script...")
sys.stdout.flush()
build.run()