1

我正在尝试运行脚本并在控制台中输出结果。它有效,但有一个

我现在面临的小问题。如果“脚本”文件写入/编码错误,我会得到如下输出:

 syntax error, unexpected $undefined, expecting $end puts

这很好,它告诉我脚本文件中的代码有问题,但在我的代码行中:

printf("%s", path);

它不会打印给我,我希望它打印出来,这样我就可以在屏幕上显示它。请帮帮我

 fp = popen("our script...is here", "r");
    if (fp == NULL)
        /* Handle error */;


    while (fgets(path, PATH_MAX, fp) != NULL)
        printf("%s", path);


    status = pclose(fp);

Ps:只是为了更清楚,我使用的是 xcode,不介意 C 或 C++ 中的代码

4

2 回答 2

1

你必须关心标准错误 -popen()只处理标准输出:

相反,从“打开的”流中读取命令的标准输出,

shell 错误将打印到 stderr - popen() 无法处理。

于 2012-12-26T15:05:45.153 回答
1

默认情况下fgets()仅从流的标准输出中读取。要捕获stderr,您可以简单地将其重定向到stdout

 fp = popen("./script 2>&1", "r");

现在 stdout 和 stderr 都将转到您的 C 代码可以读取的 stdout。

请注意,一旦您按照上述方式进行了重定向,就无法区分 stdout 和 stderr。

于 2012-12-26T15:12:40.797 回答