如何在nodejs里调用执行系统命令 - 起点终站

我们应该感谢相遇,无论结局是喜是悲....
如何在nodejs里调用执行系统命令
  • 首页 > IT技术
  • 作者:起点终站
  • 2017年8月2日 15:10 星期三
  • 浏览:22961
  • 字号:
  • 评论:0
  • 所有的编程语言都有执行系统命令的接口,nodejs也不例外,比如删除调用shell命令,将一个HTML文件转换成PDF文件,如果是PHP,很简单:

    <?php
    `prince -v builds/pdf/book.html -o builds/pdf/book.pdf`
    ?>


    在PHP里系统命令可以放在反单引号(`)里执行。如果你要是使用nodejs,你需要调用引用child_process模块:

    var exec = require('child_process').exec;
    var cmd = 'prince -v builds/pdf/book.html -o builds/pdf/book.pdf';
    exec(cmd, function(error, stdout, stderr) {
      // 获取命令执行的输出
    });


    这里使用的是child_process.exec来在nodejs程序里执行系统命令。如果你想在shell里执行命令并且要处理命令输出的I/O数据流,输出的体积比较大的话,我们需要使用child_process.spawn


    var spawn = require('child_process').spawn;
    var child = spawn('prince', [
      '-v', 'builds/pdf/book.html',
      '-o', 'builds/pdf/book.pdf'
    ]);
    
    child.stdout.on('data', function(chunk) {
      // output will be here in chunks
    });
    
    // or if you want to send output elsewhere
    child.stdout.pipe(dest);


    如果你想在nodejs里执行的是一个文件,而不是一个简单的命令,那你就需要使用child_process.execFile,这个方法的参数几乎和spawn一样,只是多了第四个回调函数参数,和exec里的回调函数参数一样:

    var execFile = require('child_process').execFile;
    execFile(file, args, options, function(error, stdout, stderr) {
      // command output is in stdout
    });


    上面的这些方法在nodejs里都是异步执行的,到但有时候我们需要同步执行一些任务,下面的一些代码例子是使用同步的方法调用系统命令执行任务:

    'use strict';
    const
        spawn = require( 'child_process' ).spawnSync,
        ls = spawn( 'ls', [ '-lh', '/usr' ] );
    
    console.log( `stderr: ${ls.stderr.toString()}` );
    console.log( `stdout: ${ls.stdout.toString()}` );

    const execSync = require('child_process').execSync;
    var cmd = execSync('prince -v builds/pdf/book.html -o builds/pdf/book.pdf');


      您阅读这篇文章共花了:  
    本文作者:起点终站      文章标题: 如何在nodejs里调用执行系统命令
    本文地址:https://blog.hellozwh.com/?post=320
    版权声明:若无注明,本文皆为“起点终站”原创,转载请保留文章出处。
    • blogger
    返回顶部| 首页| 手气不错| 网站地图| sitemap| 装逼生成器| 站长介绍|

    Copyright © 2016-2019 起点终站 闽ICP备16011094号-1