G_done_msg() does some figuring on where to send the output:
if (isatty(1))
out = stdout;
else if (isatty(2))
out = stderr;
for one thing, shouldn't that use fileno(stdout) instead of "1", and
for another shouldn't it try to send to stderr first? always?
G_message(), G_warning(), and G_fatal_error() all send exclusively to
stderr, with the bell getting a isatty(fileno(stderr)) test.
I've written a script which calls a module which uses G_done_msg().
I'd like to pipe the stdout to a file, but currently the output of
G_done_msg() is polluting matters.
G_done_msg() does some figuring on where to send the output:
if (isatty(1))
out = stdout;
else if (isatty(2))
out = stderr;
for one thing, shouldn't that use fileno(stdout) instead of "1", and
for another shouldn't it try to send to stderr first? always?
I think it should. Shouldn't even bother checking.
G_message(), G_warning(), and G_fatal_error() all send exclusively to
stderr, with the bell getting a isatty(fileno(stderr)) test.
I've written a script which calls a module which uses G_done_msg().
I'd like to pipe the stdout to a file, but currently the output of
G_done_msg() is polluting matters.
Yes exactly. We had a discussion a while ago about r.proj printing a message to say when it was finished or something and the suggestion was to use G_done_msg(...) instead of fprintf(stderr, ...). I looked at the source of G_done_msg() and thought that would be a bad idea so didn't change anything. Meant to bring it up on the list but didn't get round to it.
There must be a reason for the current logic in G_done_msg() though.
but in general, I feel the "output to stderr to stdout?" issue has been quite confused in GRASS for a long time until we decided that anything that was part of the results/analysis output of the module should go to stdout, while informative user messages should go to stderr.
So probably most of what's in G_done_msg() should be stripped out and simplified, IMHO.