0
点赞
收藏
分享

微信扫一扫

Node.js学习指南第二版第8章child_process子进程Windows版本命令示例


Node.js学习指南第二版第8章讲的是child_process,用来创建子进程执行操作系统Shell命令的。

书中的代码示例只给了UNIX版本的代码,在Linux和OSX系统上可以使用,但是在Windows系统上无法工作。这对于使用Windows系统学习Node的同学非常不友好。

其实两个命令主要的不同基本只有shell命令的区别。因此我把书中大部分例子转换为了Windows版本的代码,方便使用Windows学习的同学。

 

8.1节 P157-158 代码

var spawn = require('child_process').spawn;
var pwd = spawn('chdir', {shell: true});
pwd.stdout.on('data', data => console.log(`stdout: ${data}`));
pwd.stderr.on('data', data => console.error(`stderr: ${data}`));
pwd.on('close', code => console.log(`child process exited with code ${code}`));

8.1节 P158中间 错误代码

var pwd = spawn('chdir', ['-p'], {shell: true});

8.1节 P158-159 例8-1 代码

// shell: dir . /S /B | findstr test
var spawn = require('child_process').spawn;
var dir = spawn('dir', ['.', '/S', '/B'], {shell: true});
var findstr = spawn('findstr', ['test'], {shell: true});

findstr.stdout.setEncoding('utf8');
dir.stdout.pipe(findstr.stdin);
findstr.stdout.on('data', data => console.log(`stdout: ${data}`));
findstr.stderr.on('data', data => console.error(`findstr stderr: ${data}`));
dir.stderr.on('data', data => console.error(`dir stderr: ${data}`));

dir.on('close', function (code) {
if (code !== 0) {
console.log(`dir process exited with code ${code}`);
}
});
findstr.on('exit', function (code) {
if (code !== 0) {
console.log(`dir process exited with code ${code}`);
}
});

8.1节 P160 代码

不包含关闭行缓存的部分

// tasklist /NH | findstr apache2
var spawn = require('child_process').spawn;
var tasklist = spawn('tasklist', ['/NH'], {shell: true});
var findstr = spawn('findstr', ['apache2'], {shell: true});

tasklist.stdout.pipe(findstr.stdin);

tasklist.stderr.on('data', data => console.log(`tasklist stderr: ${data}`));
tasklist.on('close', function (code) {
if (code !== 0) {
console.log(`tasklist process exited with code ${code}`);
}
});
findstr.stdout.on('data', data => console.log('' + data));
findstr.stderr.on('data', data => console.log(`findstr stderr: ${data}`));
findstr.on('close', function (code) {
if(code !== 0) {
console.log(`findstr process exited with code ${code}`);
}
})

8.1.1节 P161 execfile代码

var execfile = require('child_process').execFile;
var child = execfile('node', ['app.js'], function (error, stdout, stderr) {
if (error == null) {
console.log(`stdout: ${stdout}`);
}
});

/*
app.js
console.log(global);
*/

8.1.1节 P161-162 exec代码

var exec = require('child_process').exec;
var child = exec('node app.js', function(error, stdout, stderr) {
if(error) return console.error(error);
console.log(`stdout ${stdout}`);
})

/*
app.js
console.log(global);
*/

8.1.1节 P162 代码 略

8.1.1节 P163 代码 (与书上相同)

const cp = require('child_process');
const child = cp.execFile('node', ['-i'], (err, stdout, stderr) => {
console.log(stdout);
})
child.stdin.write('process.version;\n');
child.stdin.end();

8.1.2节 代码与书上相同

8.2节则本身就是在windows系统上运行。

代码为根据书中示例原创修改。

举报

相关推荐

Effective Java第二版第4章

Effective Java第二版第2、3章

0 条评论