我的问题和这个问题很接近这里附加与超时相关的限制
我正在使用 Jenkins 启动一些自动化测试,然后捕获正在运行的测试的标准输出(和标准错误)。正如我在那里回答的那样,我已经确定了如何在测试完成后显示标准输出和标准错误,但是我描述的方法会在进程结束执行时在终端中打印所有内容,而不是在执行过程中打印所有内容。
出现问题的原因在于,如果 Jenkins 在输出管道上没有看到任何活动,我的测试作业就会超时 15 分钟(测试脚本可能需要 1.5 小时或更长时间才能运行)。我不希望大幅增加此超时时间,因为测试可能会挂起。
有没有办法在 psexec 正在运行的终端窗口中实时获取 psexec 创建的子进程的 stdout 和 stderr 流?
psexec 由测试机器上的批处理脚本启动,不通过网络使用。
我考虑过使用 -d 标志运行 psexec,并将子进程输出通过管道传输到文件,然后在批处理脚本中运行一个循环等待该进程完成,这似乎更像是一种黑客攻击,应该是最后手段。
runas 不是一个好的选择,因为 Jenkins 需要知道测试脚本何时完成。我可以使用 PID 和等待循环做类似上面提到的操作,但这仍然是一种 hack。
我还想知道是否可以简单地将 psexec 的 IO 流传递给子进程并通过这种方式将输出直接修补回 Jenkins,但我不知道如何做到这一点。