I probably should clarified that I'm not actually running this silly inline 
bash script in my real code - that was to generate some sample output. My 
real application is running executable scripts (python, mostly).

On Sunday, October 27, 2013 1:17:14 PM UTC+11, surgemcgee wrote:
>
> Well, not to be all "let me tell ya", but if your will..
> I would not use bash as a specified shell.
> 1. The users login shell which owns the script should be used.
> 2. This needs to be written in bash and called as a script.
> 3. DONE is a bash namespace
>
> Logs should be used instead.
>
>
> On Sat, Oct 26, 2013 at 9:19 PM, Tim Cuthbertson 
> <[email protected]<javascript:>
> > wrote:
>
>> I want to spawn a child process and have *all* output go to the same file.
>>
>> I tried this:
>>
>>     var fs = require('fs'), childProcess = require('child_process');
>>     var output = fs.openSync('/tmp/output.log', 'w');
>>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], {stdio: ['ignore', output, output]});
>>
>> Which presumably provides the same FD for both stdout and stderr in the 
>> child process. Looking at the file produced, I get:
>>
>>     STOUT
>>     DONE
>>
>> stderr is apparently being ignored. Looking at the child_process docs, 
>> there's an example that opens *two* versions of the same file (in append 
>> mode), and uses this for stdout / stderr. Since I want to truncate the file 
>> (not append), I tried:
>>
>>     var fs = require('fs'), childProcess = require('child_process');
>>     var output = fs.openSync('/tmp/output.log', 'w');
>>     var output2 = fs.openSync('/tmp/output.log', 'a');
>>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], {stdio: ['ignore', output, output2]});
>>
>> But it looks like the write stream is not playing nice and is overwriting 
>> the other stream's output, as I get:
>>
>>     STOUT
>>     DONE
>>     R
>>
>> So I guess I have to explicitly truncate the file first, then open two 
>> append streams to it?
>>
>>     fs.closeSync(fs.openSync('/tmp/output.log', 'w'));
>>     var output = fs.openSync('/tmp/output.log', 'a');
>>     var output2 = fs.openSync('/tmp/output.log', 'a');
>>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], {stdio: ['ignore', output, output2]});
>>
>> Which finally gives me the desired output:
>>
>>     STOUT
>>     STDERR
>>     DONE
>>
>> For kicks, I also tried reusing a single append stream:
>>
>>     fs.closeSync(fs.openSync('/tmp/output.log', 'w'));
>>     var output = fs.openSync('/tmp/output.log', 'a');
>>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], {stdio: ['ignore', output, output]});
>>
>> But that gave me the same results as my initial attempt (no stderr at 
>> all).
>>
>>
>> I guess I've discovered *how* to do this (my third attempt), but that 
>> seems pretty ugly. Can anyone suggest a better way? In python, we can 
>> explicitly redirect the child's stderr to stdout:
>>
>>     output = open('/tmp/output.log', 'w');
>>     subprocess.Popen(['bash', '-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], stderr = subprocess.STDOUT)
>>
>> Is there anything similar in nodejs, or am I stuck with explicitly 
>> truncating the file, followed by opening two append-mode descriptors?
>>
>> Cheers,
>>  - Tim.
>>
>> -- 
>> -- 
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>  
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
>
> -- 
> <surgemcgee> Systems/Software Engineer
>
>
>
>  

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to