如何比较正在运行的进程的输出?

Ins*_*ous 5 command-line text-processing

我正在gem5 模拟器上运行一个基准测试,它在运行时保持打印输出到终端。我已经在文本文件中存储了相同基准的示例运行。

所以现在我想将打印到控制台的输出流与之前的 Golden run 的文本文件进行比较。如果输出与文本文件相比存在差异,则应自动终止模拟。

基准测试需要大量时间来运行。我只对当前运行中的第一个错误感兴趣,这样我就可以节省等待执行完成以比较两个输出的时间。

Jac*_*ijm 3

正如您提到的那样,我无法抗拒进一步寻找一种正确的方法来将正在运行的进程(在终端中)的输出与“黄金运行”文件进行比较的困惑。

如何捕获正在运行的进程的输出

我使用script带有-f选项的命令。这会将当前(文本)终端内容写入文件;该-f选项是在每次写入事件到终端时更新输出文件。脚本命令用于记录终端窗口中发生的所有情况。
下面的脚本定期导入此输出。

这个脚本的作用

如果您在终端窗口中运行脚本,它将打开第二个终端窗口,并使用该script -f命令启动。在这个(第二个)终端窗口中,您应该运行命令来启动基准测试过程。虽然此基准测试过程会产生结果,但这些结果会定期(每 2 秒)与您的“黄金运行”进行比较。如果发生差异,则不同的输出将显示在“主”(第一个)终端中,并且脚本终止。出现一行,格式如下:

error: ('Solutions: 13.811084', 'Solutions: 13.811084 aap noot mies')

explanation:

error: (<golden_run_result>, <current_differing_output>)
Run Code Online (Sandbox Code Playgroud)

在此输出之后,您可以安全地关闭第二个窗口,运行测试。

如何使用

  • 将下面的脚本复制到一个空文件中。
    当您查看“黄金运行”文件时,第一部分(在实际测试开始之前)是无关紧要的,并且在不同的系统上可能会有所不同。因此,您需要定义实际输出开始的行。在你的情况下我将其设置为:

    first_line = "**** REAL SIMULATION ****"
    
    Run Code Online (Sandbox Code Playgroud)

    如有必要,请更改它。

  • 设置“golden run”文件的路径。
  • 将脚本保存为compare.py,通过命令运行:

    python3 /path/to/compare.py
    
    Run Code Online (Sandbox Code Playgroud)

    `

  • 第二个窗口打开,显示Script started, the file is named </path/to/file>
  • 在第二个窗口中,运行基准测试,第一个不同的结果出现在第一个窗口中:

在此输入图像描述

我是如何测试的

我创建了一个小程序,可以逐一打印您的黄金运行编辑版本的台词。我让脚本将其与原始的“golden run”文件进行比较。

剧本:

error: ('Solutions: 13.811084', 'Solutions: 13.811084 aap noot mies')

explanation:

error: (<golden_run_result>, <current_differing_output>)
Run Code Online (Sandbox Code Playgroud)