1

I'm trying to run a script and output the result in the console. It works, but there is a

small problem i'm facing right now. If the "script" file is writed/coded wrong i get as output something like:

 syntax error, unexpected $undefined, expecting $end puts

which is very good that it tells me somehting is wrong with the code inside the script file, but in my code line:

printf("%s", path);

it dosent print that to me and i want it to print it so i can display it on the screen. Please help me out

 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: just to make it more clear i'm using xcode and dont mind the code in C or C++

2 Answers2

1

You have to care about the stderr - popen() handled only stdout:

Conversely, reading from a "popened" stream reads the command's standard output,

The shell error will be printed to stderr - which popen() does not handle.

Andreas Florath
  • 4,418
  • 22
  • 32
1

By default fgets() reads only from stdout of the stream. To capture stderr, you can simply redirect it to stdout:

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

Now both the stdout and stderr will go stdout which your C code can read from.

Note that once you have redirected as above there's no way to differentiate stdout and stderr.

P.P
  • 117,907
  • 20
  • 175
  • 238