传递程序一输出作为程序二的输入

时间:2014-08-05 10:18:02

标签: c++ linux input output communication

我希望找到一种方法将程序1的输出传递给程序2的输入。我创建了两个非常简单的程序来尝试和理解如何做到这一点,但我遇到了问题。

ProgramOne:

#include <iostream>
int main()
{
    using namespace std;
    std::cout << "Hello World!";
    return 0;
}

ProgramTwo(打印所有参数):

#include <iostream>

int main(int argc, char *argv[])
{
    using namespace std;

    cout << "There are " << argc << " arguments:" << endl;

    // Loop through each argument and print its number and value
    for (int nArg=0; nArg < argc; nArg++)
        cout << nArg << " " << argv[nArg] << endl;

    return 0;
}

我尝试使用pipe命令传递输出:

./one | ./two

但我的第二个程序只打印一个参数:

There are 1 arguments:
0 ./two

我也尝试过以下命令:

/one > ./two

但这导致两个程序都没有输出。

我哪里错了?

2 个答案:

答案 0 :(得分:4)

将一个程序的输出传递给另一个程序的方法是正确的:

./one | ./two

但是,您似乎不想这样做,并且希望将一个程序的所有输出作为另一个程序的命令行参数传递。

有多种方法可以做到这一点,但其中一种方法是:

./two `./one`

(注意反击!)

如果您想将其作为单个参数传递,请尝试:

./two "`./one`"

答案 1 :(得分:1)

你非常接近。您可以使用xargs工具将标准输出转换为一系列参数,以便调用后续程序。例如,您可以这样做:

 ./one | xargs ./two

这有望打印出“Hello world”作为程序二的参数。