linux 下node.js 使用child_process模块的exec方法所遇问题
来源:互联网 发布:全局收敛的算法有 编辑:程序博客网 时间:2024/05/17 10:41
linux(fedora)下,我们在使用child_process模块的exec方法时经常会遇到“未找到命令”错误,如下简单示例:
//test.js:var exec = require('child_process').exec,child;child = exec('lessc less/playbar.less > css/playbar.css', function(err, out, code) {console.log('stdout: ' + out);console.log('stderr: ' + err);if (err !== null) {console.log('error!!!!!!!!!!!!!!!!')}});
我在使用sudo node test.js运行时出现了
上述问题解决办法
1、为exec方法的第二个可选参数对象的env属性赋值,即增加执行命令的环境变量。首先你必须找到要执行的命令所在文件夹,我这儿的“lessc”命令位于/usr/local/node/bin文件夹下。注意,在拼接PATH时别忘记了冒号":",因为linux环境变量以冒号分隔。
//test.jsvar exec = require('child_process').exec,child;var temp = process.env,environment = {};environment.PATH = temp.PATH+":/usr/local/node/bin";var option = {env: environment}child =exec('lessc less/playbar.less > css/playbar.css', option, function(err, out, code) {console.log('stdout: ' + out);console.log('stderr: ' + err);if (err !== null) {console.log('error!!!!!!!!!!!!!!!!')}});
因为exec方法在执行命令时,若缺少第二个可选参数,则默认读取process.env中的环境变量值,所以上述代码还可以简化为:
//test.jsvar exec = require('child_process').exec,child;process.env.PATH+=":/usr/local/node/bin";child =exec('lessc less/playbar.less > css/playbar.css', function(err, out, code) {console.log('stdout: ' + out);console.log('stderr: ' + err);if (err !== null) {console.log('error!!!!!!!!!!!!!!!!')}});
2、更加简便的方法是直接为lessc命令添加其所在路径,如下代码中第5行所示
//test.jsvar exec = require('child_process').exec,child;child =exec('/usr/local/node/bin/lessc less/playbar.less > css/playbar.css', function(err, out, code) {console.log('stdout: ' + out);console.log('stderr: ' + err);if (err !== null) {console.log('error!!!!!!!!!!!!!!!!')}});
3、我认为可以修改执行环境的环境变量,于是上网找到http://hi.baidu.com/mkdbmdhozbbgmwq/item/f032700732a418ca915718e8,按上面说的用了3种方法增加了/usr/local/node/bin的环境变量,在terminate上运行$PATH也可以看到其已修改成功。但是在运行sudo node test.js命令时(运行的是未用方法1修改前的test.js),却依旧报相同“未找到命令”错误......我刚学node.js,且对linux(使用fedora中)也不太熟悉,哪位知道如何解决的,求指点迷津,非常感谢。
0 0
- linux 下node.js 使用child_process模块的exec方法所遇问题
- Node.js child_process模块中的spawn和exec方法
- Windows下Node.js使用child_process模块调用系统命令的编码问题
- Node.js 中 child_process模块的spawn和exec 方法之间的区别
- nw.js node-webkit系列(25)child_process中spawn和exec方法的使用
- node.js 在使用child_process 模块时候,调试端口占用的问题解决方案(EADDRINUSE)
- Node.js进程通信模块child_process
- Node.js进程通信模块child_process
- Node.js进程通信模块child_process
- Node.js使用child_process运行脚本的输入输出错误
- Node.js 使用 child_process 实现多进程
- Node.js 使用 child_process 实现多进程
- Node child_process的fork,spawn,exec我有话要说
- 使用Nodejs中的process模块--child_process.exec 来删除本地文件
- 从Node.js的child_process模块来学习父子进程之间的通信
- Node.js学习笔记(6、child_process模块)
- node child_process模块学习笔记
- Node.js子进程child_process
- iOS的基本的设计模式
- 提取海量文本文件中含有指定字符串的行
- debian 设置开机自启动
- 黑马程序员--基础--第一篇--RandomAccessFile,PipedInputStream和ByteArrayInputStream类
- 双网卡双网关冲突问题
- linux 下node.js 使用child_process模块的exec方法所遇问题
- 用于词义消岐的Lesk算法
- hdu 1160 FatMouse's Speed 题解(简单dp)
- 解释器模式(Interpreter Pattern)
- 最近在写个自动下载数据的软件,发现QT的QFtp不大好用
- CSS
- __asm__ __volatile__内嵌汇编用法简述
- 黑马程序员--高新技术--代理
- 2014年研究方向