Reputation: 181
I'm trying this out:
var child = spawn('node', args, {cwd: parentDir, stdio: 'ipc'} );
(args is an array of parameters)
but it gives the following error:
TypeError: Incorrect value of stdio option: ipc
This actually works, so the problem seems indeed to be the stdio ipc parameter:
var child = spawn('node', args, {cwd: parentDir} );
This also works:
var child = spawn('node', args, {cwd: parentDir, stdio: 'pipe'} );
I read this: http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options but I don't see where I am going wrong. This is the first time I try to use this NodeJS functionality so I am sorry if the problem is evident.
Maybe there is some other way to solve the problem. The child has to be spawned and not forked and I simply want to be able to send messages from the child to the parent.
Thank you!!
EDIT: I have Node v0.8.18. I searched version history for IPC http://nodejs.org/changelog.html and there's nothing with search term "IPC" that makes me think that I need a newer version of NodeJS.
Upvotes: 14
Views: 16222
Reputation: 7067
Here's a full example, slightly different from the other answers:
parent.js
spawn('node', ['child.js'], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
}).on('message', function(data) {
console.log(data);
});
cwd
as the parent.inherit
is used to share the same streams (like stdout
) with the child, so you can see stuff in your console for example.child.js
process.send && process.send('hello parent');
undefined
), so you need to check first.Upvotes: 13
Reputation: 309
Rockamic answered his own question, based on a couple of my nudges. Here's what worked & why:
var child = spawn('node', args, {cwd: parentDir, stdio: [null, null, null, 'ipc']} );
specifying stdin, stdout, stderr, as null indicates default...
If rockamic comes back and provides his own answer, I will gladly delete this so he can get the accepted answer.
Upvotes: 5
Reputation: 309
try:
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: 'ipc'} );
(adding brackets to your arg which is supposed to be an array) and see if that alters your error-
if not perhaps
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: ['pipe', 1, 2, 'ipc']} );
And you may want to alter 'pipe', or address the stdout as well... not sure what you really want here.
finally, this seems like a good post to help you get some perspective. The title doesn't seem like a fit, but if you read what is happening in the code I think it'll be helpful:
http://blog.trevnorris.com/2013/07/child-process-multiple-file-descriptors.html
Don't forget to post results & help others with specifically what worked or what you changed... thx
Upvotes: 0