在node.js中运行交互式子shell程序

时间:2015-11-26 02:40:53

标签: javascript node.js shell stdout stdin

我正在尝试在node.js中运行一个交互式子shell程序,其中主进程在子进程完成时退出。如果我这样做,它的效果非常好:

var spawn = require('child_process').spawn;

var child = spawn('npm', ['init'], { stdio: 'inherit' });

但是,我想做一个手动实现,但是在子程序完成后我遇到了终止进程的问题。这就是我所在的地方:

var spawn = require('child_process').spawn;

var child = spawn('npm', ['init']);

process.stdin.on('data', function (data) {
    console.log('process.stdin!');
    child.stdin.write(data);
});

child.stdout.on('data', function (data) {
    console.log('child.stdout!');
    process.stdout.write(data);
});

// doesn't fire
child.on('close', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

// doesn't fire
child.on('disconnect', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

// doesn't fire
child.on('exit', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

我对shell脚本的了解相当有限,我不清楚子进程是否表明它已完成,如果我必须听另一种类型的退出事件,或者我的整个方法是否适用于此用例是有缺陷的。期望的行为是在子进程完成之后主进程退出(在这种情况下,在“npm init”完成所有问题之后)。这仅用于教育目的,请不要推荐抽象库。

0 个答案:

没有答案