在我的Node.js(v0.10.9)代码中,我尝试检测2个案例:
我的问题是,当且仅当进程成功生成(即stdin已准备好写入)时,我才知道如何将数据发送到子节点。 如果安装了 dot ,以下代码可以正常工作,但是否则它会尝试向孩子发送数据,尽管孩子没有生成。
var childProcess = require('child_process');
var child = childProcess.spawn('dot');
child.on('error', function (err) {
console.error('Failed to start child process: ' + err.message);
});
child.stdin.on('error', function(err) {
console.error('Working with child.stdin failed: ' + err.message);
});
// I want to execute following lines only if child process was spawned correctly
child.stdin.write('data');
child.stdin.end();
我需要这样的东西
child.on('successful_spawn', function () {
child.stdin.write('data');
child.stdin.end();
});
答案 0 :(得分:0)
来自node.js文档:http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
检查失败的exec的示例:
var spawn = require('child_process').spawn,
child = spawn('bad_command');
child.stderr.setEncoding('utf8');
child.stderr.on('data', function (data) {
if (/^execvp\(\)/.test(data)) {
console.log('Failed to start child process.');
}
});
答案 1 :(得分:0)
看看核心工作者: https://www.npmjs.com/package/core-worker
这个包使得处理过程变得更加容易。 我想你想要做的就是这样(来自文档):
import { process } from "core-worker";
const simpleChat = process("node chat.js", "Chat ready");
setTimeout(() => simpleChat.kill(), 360000); // wait an hour and close the chat
simpleChat.ready(500)
.then(console.log.bind(console, "You are now able to send messages."))
.then(::simpleChat.death)
.then(console.log.bind(console, "Chat closed"))
.catch(() => /* handle err */);
因此,如果进程未正确启动,则不会执行任何.then语句,这正是您想要做的,对吧?