准备工作:
1. 来到我们的工作目录$ cd ~/nodejs
2. 如果还没有工作目录,请按下面方式新增
$ cd ~ $ mkdir nodejs $ cd nodejs
目标:接收命令行一个或多个参数,并求和
Node.js为我们提供了一个全局对象process
,其中process.argv
属性可以获取到所有命令行参数。
下面,我们来简单测试一下:
创建或编辑文件:~/nodejs/program.js
内容只有一行:
console.log(process.argv)
保存退出,我们输入命令:
$ node program.js 1 2 3
控制台输出结果类似:
[ 'node', '/path/to/your/program.js', '1', '2', '3' ]
输出的第一个元素总是”node”,第二个元素是命令文件所在地址”/path/to/your/program.js”,后面开始就是命令行的各个参数。
所以如果我们要计算各个参数的和,需要从第3个元素(index为2)的地方开始遍历。
注意:process.argv输出的全部是字符串类型。我们可以用
+process.argv[2]
或者Number(process.argv[2])
来转为数值类型。
下面开始实际操作:
1. 新建文件node02.js
$ vim node02.js
2. 申明一个变量result
用来保存求和后的结果
var result = 0;
3. 使用for
语句遍历命令行参数(process.argv)
for (var i = 2; i < process.argv.length; i++) {
result += Number(process.argv[i]);
}
4. 使用console
打印结果
console.log(result);
然后保存后,退出
5. 使用node
命令运行程序
$ node node02.js 1 2 3
6. 检查控制台输出结果:
6
本篇代码
文件:~/nodejs/node02.js
var result = 0;
for (var i = 2; i < process.argv.length; i++) {
result += Number(process.argv[i]);
}
console.log(result);
扩展阅读
process
对象
process
是Node.js中的一个全局对象,提供了跟进程相关的操作。同时也是”Class: events.EventEmitter”的实例,拥有”EventEmitter”的事件处理机制。
本例中,除了使用”process.argv”来获取命令行参数外,其实在console.log(result)
调用时,内部也使用到了process所提供的标准输出流。
输出流案例:process.stdout
例如console.info([data][, …])
的定义:
console.log = function(d) {
process.stdout.write(d + '\n');
};
内部使用了process.stdout用来向标准输出流输出日志
输入流案例:process.stdin
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write('data: ' + chunk);
}
});
process.stdin.on('end', function() {
process.stdout.write('end');
});
运行以上程序,会把我们输入的内容原样打印出来。按”Control+D”结束程序时,会输出”end”。
参数获取案例:process.argv
// print process.argv
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
});
process
的更多属性及方法,请参考官方文档
参考资料:
process Node.js v0.12.7 Manual & Documentation
learnyounode - BABY STEPS