如何比较和打印具有相同输入的三个 exe 文件的输出?

Posted

技术标签:

【中文标题】如何比较和打印具有相同输入的三个 exe 文件的输出?【英文标题】:How to compare and print the output of three exe files with the same input? 【发布时间】:2022-01-10 05:46:18 【问题描述】:

我有 3 个可执行文件 MyExe1、MyExe2 和 MyExe3,我可以在(我的 MacO 的)终端上运行它们

$ ./MyExe1 9
9 is odd
$ ./MyExe2 9
9 is odd
$ ./MyExe3 9
9 is odd
$ ./MyExe1 8
8 is even

我在文件 MyInputs.txt 中的输入(包含数字 0、1、... 100)。

我怎样才能只为输出(相同输入)不同的所有数字打印输出?

MyExe1、MyExe2 和 MyExe3 只接受一个输入(实际上是一个数字),而不是一个文件,也不是一个数字向量。

我发现有几种方法..一种是使用popen()、execl()、system()。是否可以使用 popen() 调用 MyExe1、MyExe2 和 MyExe3?

【问题讨论】:

如果 MyExe# 正在输出到 STDOUT,popen() 将是一个简单的选择。它必须在C中完成吗?在列表上运行并比较输出在 shell 脚本中会更容易。 谢谢!输出到屏幕上,所以我会尝试 popen()。是的,在 C. JJV 中。 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here? 和What do I do when someone answers my question? 【参考方案1】:

在 Mac 上的 shell 脚本中,您可以编写 (test-exe.sh):

out1="MyExe1.output"
out2="MyExe2.output"
out3="MyExe3.output"
for file in "$out1" "$out2" "$out3"; do cp /dev/null "$file"; done
while read number
do
    ./MyExe1 "$number" >> "$out1"
    ./MyExe2 "$number" >> "$out2"
    ./MyExe3 "$number" >> "$out3"
done
diff3 "$out1" "$out2" "$out3"

然后你可以通过运行从MyInputs.txt读取数字:

$ sh test-exe.sh < MyInputs.txt
…maybe some output…
$

如果输出都相同,则不会有输出。如果某处有差异,diff3 程序会报告它。


我的印象是diff3 "$out1" "$out2" "$out3" 需要完整计算 MyExe#(所有输入数字从 1 到 100)。是不是可以避免呢? (如果我需要处理更多的数字(例如从 1 到 10 00000),恐怕我会遇到记忆问题。

可以制作各种 cmet。首先,diff3 处理给定的三个文件。它并不在乎它们有多大。您可以在每次单独运行可执行文件的输出上运行它。

其次,显示的输出非常小(比如每次运行不到 30 字节)——因此每个程序的一百万个输出不会生成 30 MiB 的数据,或者总共 100 MiB。没有什么可以阻止您一次运行 10,000 行脚本并在每个中间文件上运行 diff3

为了我的钱,我会修改程序,以便它们可以从标准输入中读取并重复计算。如果有命令行参数,则按现在处理它们(每次调用允许多个参数除外)。如果没有参数,则从标准输入中读取行并处理每一行的值。同样,这意味着代码可能会在每次调用时处理多个输入。

然后,您可以将输入文件分成大小合适的块,然后运行三个可执行文件并比较三个结果。借用 Perl 的座右铭:TMTOWTDI — 有不止一种方法可以做到。

【讨论】:

谢谢乔纳森·莱弗.. 只是一个问题。我的印象是 diff3 "$out1" "$out2" "$out3" 需要完整计算 MyExe#(所有输入数字从 1 到 100)。是不是可以避免呢? (如果我需要处理更多的数字(从 1 到 10 00000),恐怕我会遇到记忆问题。最诚挚的问候,JJV。 我已在我的回答中添加了附录以解决您的评论。 乔纳森·莱弗勒。非常感谢您的所有解释。我真的很感激他们。最诚挚的问候,JVV

以上是关于如何比较和打印具有相同输入的三个 exe 文件的输出?的主要内容,如果未能解决你的问题,请参考以下文章

在具有不同输入的 1x exe 中同时多次运行 python 脚本

如何在单个EXE中嵌入多语言* .resx(或* .resources)文件?

如何解决不正确的字母比较错误

linux操作系统的三个主要部分及其功能

如何比较具有不同名称引用但具有相同实际数据的两个列表

比较具有相同逻辑的 2 个源代码