0

我有一个主要的构建脚本,每个詹金斯作业都会执行。此主脚本获取作业名称(来自 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("Starting script...")
build.run()

这在控制台上运行良好,因为它在运行之前显示“启动脚本”。不幸的是,在 Jenkins 中,它总是在控制台中显示 build.run() 的输出,然后再显示主脚本中的任何内容。我什至尝试将 build.run() 放在最底部,在 if 语句等中。

关于如何使其以正确的顺序在 Jenkins 中运行/显示的任何想法?

4

1 回答 1

0

子进程在退出时刷新其输出缓冲区,但来自父进程的打印仍然在父进程的缓冲区中。解决方案是在运行子进程之前刷新父缓冲区:

print("Starting script...")
sys.stdout.flush()
build.run()
于 2013-07-09T15:23:27.183 回答