有没有办法从 psexec 在与 psexec 相同的流(管道)上生成的进程中获取实时 stdout 和 stderr

有没有办法从 psexec 在与 psexec 相同的流(管道)上生成的进程中获取实时 stdout 和 stderr

我的问题和这个问题很接近这里附加与超时相关的限制

我正在使用 Jenkins 启动一些自动化测试,然后捕获正在运行的测试的标准输出(和标准错误)。正如我在那里回答的那样,我已经确定了如何在测试完成后显示标准输出和标准错误,但是我描述的方法会在进程结束执行时在终端中打印所有内容,而不是在执行过程中打印所有内容。

出现问题的原因在于,如果 Jenkins 在输出管道上没有看到任何活动,我的测试作业就会超时 15 分钟(测试脚本可能需要 1.5 小时或更长时间才能运行)。我不希望大幅增加此超时时间,因为测试可能会挂起。

有没有办法在 psexec 正在运行的终端窗口中实时获取 psexec 创建的子进程的 stdout 和 stderr 流?

psexec 由测试机器上的批处理脚本启动,不通过网络使用。

我考虑过使用 -d 标志运行 psexec,并将子进程输出通过管道传输到文件,然后在批处理脚本中运行一个循环等待该进程完成,这似乎更像是一种黑客攻击,应该是最后手段。

runas 不是一个好的选择,因为 Jenkins 需要知道测试脚本何时完成。我可以使用 PID 和等待循环做类似上面提到的操作,但这仍然是一种 hack。

我还想知道是否可以简单地将 psexec 的 IO 流传递给子进程并通过这种方式将输出直接修补回 Jenkins,但我不知道如何做到这一点。

相关内容