美文网首页
process对象

process对象

作者: 海因斯坦 | 来源:发表于2018-11-12 21:29 被阅读0次

process对象是Node.js中非常重要的一个全局对象,它是一个与操作系统集成的对象,使用process我们可以进行许多与操作系统打交道的工作

一.使用process对象来获取操作系统的信息

问题:
你需要基于操作系统或者处理器架构运行特定于平台的代码。
解决方案:
使用process.arch与process.platform属性
讨论
Node通常是跨平台的,所以你一般不需要处理跨平台或者处理器。但是如果你希望利用系统的特性来调整项目,或者简单地收集这个脚本跑在什么系统上的数据。默写基于windows的模块可以在32位或64位的二进制文件间切换。下面的例子展示了这是如何做到的。

const arch = process.arch;
console.log(arch);  //x64
switch(arch){
  case 'x64':
    console.log('运行在64位电脑上');
    break;
  case 'ia32':
    console.log('运行在32位电脑上');
    break;
  default:
    throw new Error('Unsupported process.arch'+ arch);
}

二.传递命令行参数

Node提供了一个简单的API来处理命令行参数,你可以用来传入程序
问题:
你正在写一个需要从命令行中接受简单参数的程序。比如项目中我们在本地用的服务器是a21,在线上用的服务器是b21,不同环境下运行node需要读取不同的服务器名称,这时候就可以从命令行中简单的读取参数了。
解决方案:
使用process.argv
讨论
process.argv是一个数组你可以用它来查看有多少参数被传入,它的头两个参数是node以及这个脚本的路径,第三个参数才是你传入的参数。下面的例子展示了根据传入的参数不同,调用不同的函数。
示例

function displayHelp(){
  console.log('这里是display函数')
}
function readfile(){
  console.log('这里是readfile函数');

}
const args = {
  '-h':displayHelp,
  '-r':readfile
};
console.log(process.argv);

if(process.argv.length> 0){
  process.argv.forEach(function(arg,index){
    if(index > 1){
      args[arg]();
    }
  })
}

process.argv的输出结果:是一个数组,第一个参数是node的bin目录,第二个参数是文件的路径,第三个参数才是我们传入的参数。

[ 'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\xxx\\Desktop\\Node.js_in_practice\\chapter two\\process\\process_argv.js',
  '-r' ]

三.退出程序给定退出码

问题:
你的node程序需要在退出的时候指定退出码
解决方案
使用process.exit()方法
讨论
无论在windows中还是UNIX中,退出码都是非常重要的。其他的程序会通过退出码来确定一个程序是否执行成功。当你写的程序是一个大系统的一部分时,这显得尤其重要,并且对之后的维护以及调试都有帮助。
Node程序默认返回0的退出状态。任何的非0状态吗被认为是一个错误。在UNIX中,这个状态码可以通过$?在shell中获取。在windows中可以通过%errorlevel%获取。


function displayHelp(){
  console.log('这里是display函数')
}

function readfile(file){
  if(file){
    console.log('这里是readfile函数');
  }else{
    console.log('你没有传入参数');
    //退出程序时,指定状态码,表示程序没有执行成功
    process.exit(1);
  }
}
const args = {
  '-h':displayHelp,
  '-r':readfile
};

if(process.argv.length> 0){
  process.argv.forEach(function(arg,index){
    if(index > 1){
      args[arg]();
    }
  })
}

在上面的代码中,如果我们没有在命令行中指定参数-文件,那么就表示程序执行失败,使用process.exit(1),输出一个非零的退出码。然后再UNIX终端中,我们可以通过echo $?来获取这个退出码。

四.标准I/O流的读写

在UNIX和Windows系统中,文字可以通过命令行工具导入Node进程中。更加通俗的来说,就是无论你需要从一个应用中读取数据,还是写入数据,通过process对象来读写I/O是一个有用的技巧。使用过牛客网或者赛码网的网友可能知道,牛客网的在线判题系统中,Node.js的读写就使用的是process。如下所示:

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,    //读取输入
  output: process.stdout});  //读取输出
rl.on('line', function (line) {
  var tokens = line.split(' ');
  console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

问题:
你希望从一个Node程序导出或导入数据
解决方案:
使用process.stdout与process.stdin
讨论:
process.stdout对象是一个可读写的stream,它是process的一部分,所有的Node程序都可以使用它,并且在显示和输出时非常有用。
示例:
下面的例子展示了如何从命令行中将文字接入node程序,处理它并把它再一次输出。

//从命令行中读取数据
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (text) {
  //输出
  process.stdout.write(text.toUpperCase());
});

从命令行中输入123,输出123。输入hello输出HELLO。实现了从命令行中读写数据。


相关文章

  • process对象

    process对象是Node.js中非常重要的一个全局对象,它是一个与操作系统集成的对象,使用process我们可...

  • node 模块

    node中的全局对象 process,bufferprocess.cwd() process.nextTick ...

  • node中的process和Buffer 和 去重

    1.process是一个全局对象,无息声明就可以访问,每个node进程都有独立的process对象,该对象储存了当...

  • window.performance分析web前端性能之内存

    背景 最近开始接触NodeJS,发现process(process对象用于处理与当前进程相关的事情)对象内有个AP...

  • node之process模块

    process --进程 process对象是一个全局对象,他提供当前Node.js进程相关的有关信息,以及控制当...

  • nodejs 使用process统一处理异常

    nodejs的process是一个全局对象,可以通过process控制程序的健壮性。 1 process.exit...

  • node中的process

    process是Node.js提供的一个对象,它代表当前Node.js进程。通过process对象可以拿到许多有用...

  • python入门开发学习笔记之join方法

    本节重点 掌握Process对象的join方法了解Process对象的其他属性或方法本节时长需控制在10分钟内 一...

  • node process全局对象

    process是一个全局内置对象,可以在代码的任何位置访问此对象。这个对象代表我们的node.js代码宿主的操作系...

  • js process对象解惑

    问题描述 项目中环境隔离是避免不了的 因此经常会在项目入口文件中看到一些环境隔离的code 就有疑问:我是什么时候...

网友评论

      本文标题:process对象

      本文链接:https://www.haomeiwen.com/subject/cdlhfqtx.html