nw.js环境下 调用第三方事例
nw.js node-webkit系列(25)child_process中spawn和exec方法的使用
child_process是nw.exe的一个内置模块,通过它可以实现创建多线程,并可实现主线程和子线程之间的通信。child_process模块中主要使用有两个方法spawn和exec,这两个方法都可以用来创建子线程。除了spawn和exec外,child_process模块还有execFile,fork,spawnSync,execFileSync,execSync,它们都是基于spawn的不同封装。
使用child_process模块模块不外乎几种情况:1.调用系统命令行 2.打开第三方软件 3.打开第三方软件并实现通信。
(一)child_process模块 Demo
- var cp = require('child_process'); //子进程
- var result = "";
- cp.exec("ipconfig", function(error, stdout, stderr) {
- console.log("error", error);
- console.log("stdout", stdout);
- console.log("stderr", stderr);
- });
- result = cp.spawn('cmd.exe', ['/s', '/c', 'ipconfig']);
- result.on('close', function(code) {
- console.log('child process exited with code :' + code);
- });
- result.stdout.on('data', function(data) {
- console.log('stdout: ' + data);
- });
- result.stderr.on('data', function(data) {
- console.log('stderr: ' + data);
- });
以上两个方法无论是spawn还是exec都通过调用了命令行ipconfig获取系统相关IP信息,两者得到的结果是一样的,本Demo可看出只不过两种调用的写法不一样而已。
(二)spawn和exec的区别
(1)两者实现的写法不同,参照上述Demo即可了解。
(2)spawn在执行时会返回一个stdout和stderr流对象,为边执行边返回。exec是在执行完成后返回一个完整的buffer,这个buffer的大小应该是200k。如果子进程返回的数据大小超过了200k,程序将会崩溃,同时显示错误信息"Error:maxBuffer exceeded"。
(3)spawn在执行完成后会抛出close事件监听,并返回状态码,通过状态码可以知道子进程是否顺利执行。exec只能通过返回的buffer去识别完成状态,识别起来较为麻烦。
上述(一)中已经介绍如何调用系统命令行,下面为打开第三方软件的例子,如使用exec打开QQ程序:
- var cp = require('child_process'); //子进程
- var path = "";//第三方根目录
- cp.exec(path + "\\QQ.exe", function(error, stdout, stderr) {
- console.log("error", error);
- console.log("stdout", stdout);
- console.log("stderr", stderr);
- });
打开第三方软件并通信,如使用spawn,调用ffmpeg进行转码:
- var cp = require('child_process'); //子进程
- var path = ""; //第三方根目录
- result = cp.spawn(path + "\\ffmpeg.exe", ['-y', '-i', "1.mpg", '1.mp4']);
- result.on('close', function(code) {
- console.log('child process exited with code :' + code);
- });
- result.stdout.on('data', function(data) {
- console.log('stdout: ' + data);
- });
- result.stderr.on('data', function(data) {
- console.log('stderr: ' + data);
- });
综上所述,能使用spawn实现子进程的尽量使用spawn, 其一可以避免不必要的异常错误,其次在调用上较为规范。如果需要通过child_process模块反复调用某个第三方软件或程序,注意一点就是避免重复打开(如子进程进入死循环,或者子进程没结束就又重复打开),过多的子进程会消耗系统的资源,严重时可能会造成卡顿,死机等情况。如果遇到这种情况,可以通过.kill();方法停止线程运行。如上述使用spawn的例子中均有一个result,停止线程方法为:
- result.kill();
如需强制关闭,如强制关闭ffmpeg.exe进程,可用:
- function killFFmpeg() {
- cp.exec('tasklist | find "ffmpeg.exe"', function(error, stdout, stderr) {
- if(stdout != "") {
- cp.exec("taskkill /f /t /im ffmpeg.exe", function(error, stdout, stderr) {});
- }
- });
- };
nw.js环境下 调用第三方事例相关推荐
- 解决pip安装pygal在TensorFlow环境下调用失败问题
欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 使用pip安装pygal在Linux和OS X系统中,执行的命令如下: pip install --user pygal==1.7 在 ...
- 在控制台环境下调用MFC DLL崩溃的问题小结
使用MFC编写的DLL在MFC的程序中调用是没有任何问题的,但是如果在控制台环境下调用会出现崩溃的情况.解决方法如下,在MFC编写的DLL中添加下面一段代码,即可解决该问题: static AFX_M ...
- Pycharm环境下调用Qt desinger 常见问题以及解决方法
Pycharm环境下调用Qt desinger 常见问题以及解决方法 前言 问题1: 提示QT由于找不到msvcp140d.dll无法继续执行代码或者相关问题 问题2: This applicatio ...
- Python在指定环境下安装第三方库的报错解决办法
Python在指定环境下安装第三方库的报错解决办法 在python安装第三方库时,如果直接打开cmd命令提示符,并输入下列安装命令,则会默认安装在base环境下 但base环境下的包新建的虚拟环境是无 ...
- 关于JS调用Adobe Reader ActiveX插件,在web环境下调用本地打印机执行静默打印的实现
因为之前被实施商的前端童鞋理直气壮的卡了脖子告诉我写不出来,让我很不爽,所以还是搜集了一些资料最终测试成功了.注意一下这个只能在IE10及以上的IE内核环境下可用(我只测试了这个环境,但是IE是没跑了 ...
- Node.js 环境下的 console.log 是同步执行的
参考这个官网 通常,从您的应用程序进行日志记录有两个原因:用于调试和记录应用程序活动(本质上是其他所有内容).使用 console.log() 或 console.error() 将日志消息打印到终端 ...
- [go]沙盒环境下调用支付宝扫码支付
参考于这篇博客,在此基础上进行了封装 配置支付宝开放平台 支付宝开放平台,使用支付宝扫码并成为开发者.然后进入沙盒进行测试 下载沙盒版支付宝并使用沙盒账号中的买家信息进行登陆,之后使用此账号登陆的支付 ...
- 转:多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作 ...
- 多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作 ...
最新文章
- 一个App卖了4亿美元,这家听声识曲公司为何得到Apple的青睐?
- shell脚本判断输入参数个数
- 【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
- matplotlib给坐标轴特定的位置加上文字
- java学习日记(9)———socket,网络编程的学习
- golang控制台颜色输出(for windows)
- DbVisualizer 使用方法 图解(可以连接多种数据库的客户端)
- 计算机在教学中应用论文,极域电子教室在计算机教学中的应用
- html 分割字符串,详解js常用分割取字符串的方法
- php文件格式,php是什么文件格式
- vue 富文本编辑器 Editor 使用
- 庄子 独与天地精神往来,而不敖倪于万物
- matlab output()函数,MATLAB - Data Output
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- HEVC中打印CU划分
- Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes
- 【产品】项目管理的五大阶段
- go 函数os.OpenFile
- css背景图片和背景颜色一起显示
- 用ios企业证书发布ipa到服务器上扫码下载
热门文章
- Arcgis使用教程(七)书签(BookMarks)操作使用方法
- 光驱无法识别,提示注册表信息不完整的解决办法
- App 接入91平台步骤
- 解决ecshop出现Warning: file_put_contents
- JAVASE零基础入门——package、封装、继承、访问权限修饰符、super、重写、Javabean 和 final 关键字
- 服装品牌SPA利器,成就谁的未来?
- wmm的学习日记(upload-labs)
- WMM: WiFi MultiMedia WiFi多媒体应用
- 5 mysql 凤舞天骄_凤舞天骄简单架设方法
- 一文看懂三极管在电路中的应用原理