【问题标题】:Passing each line of a file as command line argument to a binary file将文件的每一行作为命令行参数传递给二进制文件
【发布时间】:2013-09-02 08:26:22
【问题描述】:

我有一个二进制文件:temp.exe

此二进制文件 (temp.exe) 采用两个命令行参数 ab

我还有一个文件agrsList.txt,其中包含:

a1 b1
a2 b2
a3 b3
:  :
:  :
an bn

现在,我想将此文件的每一行作为参数传递给二进制文件。

PS:我无权访问源代码,因此我可以编辑代码并使其读取文件。

有没有办法解决这个问题(不用写脚本)

【问题讨论】:

  • 如果二进制文件没有特殊规定可以从格式完全相同的文件中获取其参数并且您排除编写脚本的可能性,假设的解决方案将如何工作?魔法?
  • 这更像是一个 bash 问题,而不是一个 C 或 C++ 一个 IMO
  • 一个脚本只是一堆shell命令而已。如果你想在shell上写几个命令,你也可以写一个脚本,那会是更好的解决方案
  • 1) 我有一个文件 agrsList.txt;我想将此文件的每一行作为参数传递给二进制文件:当然。简单的。 2)我无权访问源代码,因此我可以编辑代码并使其读取文件:没问题。 3)有没有办法解决这个问题?当然。写一个脚本来读取你的文件并用下一对参数调用你的程序!!!!!!
  • @Jon:我知道脚本解决方案。我只是想知道,是否有任何直接命令可以做同样的事情...... :)

标签: c++ c linux shell


【解决方案1】:

你可以使用

    xargs -rn 2 temp.exe < agrsList.txt

-r 表示temp.exe 仅在有参数的情况下运行。 -n 2 表示temp.exe 最多使用两个参数运行。 如果agrsList.txt 中有奇数个单词,那么temp.exe 将只使用最后一个参数运行。

更多信息请参见man xargs

【讨论】:

  • 或者使用-a agrsList.txt代替重定向。
  • 标称动物:谢谢。我一直在寻找完全一样的东西。 @aragaer:感谢您的建议。
  • @aragaer:是的,xargs -rn 2 -a agrsList.txt temp.exe 可能是这里最好的方法。不同之处在于-a agrsList.txt 导致xargs 从该文件中读取参数,同时为temp.exe 保留标准输入。通过重定向,temp.exe 获得/dev/null 用于标准输入;没有用户交互。
【解决方案2】:

这种简单的事情通常最好由 一种“脚本”语言,但在 C++ 也是如此。如果您正在从标准中读取文件:

std::string args;
while ( std::getline( std::cin, args ) ) {
    system( ("temp " + args).c_str() );
}

应该是你所需要的。 (但你没有说你想做什么 如果temp 失败。)

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2019-11-10
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多