Electron 调用命令行(cmd)


Posted in Javascript onSeptember 23, 2019

因为最近的项目需求,需要在 Electron 客户端启动的时候启动 nginx 服务,所以研究了一下怎么在 Electron 调用 命令行。 因为 Electron 基于 Chromium 和 Node.js,可以直接使用 Node.js 的 API 和一些包。目前研究有以下两种方法:

child_process

child_process 是 Node.js 的内置模块,该模块提供了衍生子进程的能力。

实现代码:

const exec = require('child_process').exec
export function start () {
 // 任何你期望执行的cmd命令,ls都可以
 let cmdStr1 = 'your command code'
 let cmdPath = './file/'
 // 子进程名称
 let workerProcess
 runExec(cmdStr1)
 function runExec (cmdStr) {
  workerProcess = exec(cmdStr, { cwd: cmdPath })
  // 打印正常的后台可执行程序输出
  workerProcess.stdout.on('data', function (data) {
   console.log('stdout: ' + data)
  })
  // 打印错误的后台可执行程序输出
  workerProcess.stderr.on('data', function (data) {
   console.log('stderr: ' + data)
  })
  // 退出之后的输出
  workerProcess.on('close', function (code) {
   console.log('out code:' + code)
  })
 }
}

node-cmd

node-cmd 是 一个让 Node.js 调用命令行的包。

首先我们需要安装:

npm install node-cmd --save

实现代码:

var cmd=require('node-cmd');
 
  cmd.get(
    'pwd',
    function(err, data, stderr){
      console.log('the current working dir is : ',data)
    }
  );
 
  cmd.run('touch example.created.file');
 
  cmd.get(
    'ls',
    function(err, data, stderr){
      console.log('the current dir contains these files :\n\n',data)
    }
  );
 
  cmd.get(
    `
      git clone https://github.com/RIAEvangelist/node-cmd.git
      cd node-cmd
      ls
    `,
    function(err, data, stderr){
      if (!err) {
        console.log('the node-cmd cloned dir contains these files :\n\n',data)
      } else {
        console.log('error', err)
      }
 
    }
  );

以上就是两种在 Electron 中调用命令行的方法,其实都是借助了 Node.js的能力。

他们两者的区别是 child_process 可以指定命令执行的路径,默认项目根目录;而 node-cmd 不能指定执行路径,只能自己 cd 到目标路径。

我是使用的 child_process,具体使用场景还需要根据自己的需求来。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 风格的HTML文本转义
Jul 01 Javascript
JS 图片缩放效果代码
Jun 09 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
Apr 03 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
webpack2.0搭建前端项目的教程详解
Apr 05 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
js blob类型url的视频下载问题的解决
Nov 29 Javascript
canvas 中如何实现物体的框选
Aug 05 Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 #Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 #Javascript
小程序实现上下移动切换位置
Sep 23 #Javascript
微信小程序分包加载代码实现方法详解
Sep 23 #Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 #Javascript
layer扩展打开/关闭动画的方法
Sep 23 #Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 #Javascript
You might like
第二节--PHP5 的对象模型
2006/11/16 PHP
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
javascript异步编程的4种方法
2014/02/19 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python实现高效求解素数代码实例
2015/06/30 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Django自定义manage命令实例代码
2018/02/11 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Django实现文件上传和下载功能
2019/10/06 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
Python类的继承super相关原理解析
2020/10/22 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
小学教师培训方案
2014/06/09 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
介绍信范文大全
2015/05/07 职场文书
张丽莉观后感
2015/06/16 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA