Alexandra Sjoslavma
Alexandra Sjoslavma

Reputation: 25

get failed output back

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++

Upvotes: 1

Views: 151

Answers (2)

P.P
P.P

Reputation: 121357

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.

Upvotes: 1

Andreas Florath
Andreas Florath

Reputation: 4612

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.

Upvotes: 1

Related Questions