Ins*_*ous 5 command-line text-processing
我正在gem5 模拟器上运行一个基准测试,它在运行时保持打印输出到终端。我已经在文本文件中存储了相同基准的示例运行。
所以现在我想将打印到控制台的输出流与之前的 Golden run 的文本文件进行比较。如果输出与文本文件相比存在差异,则应自动终止模拟。
基准测试需要大量时间来运行。我只对当前运行中的第一个错误感兴趣,这样我就可以节省等待执行完成以比较两个输出的时间。
正如您提到的那样,我无法抗拒进一步寻找一种正确的方法来将正在运行的进程(在终端中)的输出与“黄金运行”文件进行比较的困惑。
我使用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)
如有必要,请更改它。
将脚本保存为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)