我想使用nodejs在命令提示符下运行命令 基于https://dzone.com/articles/understanding-execfile-spawn-exec-and-fork-in-node,我使用了
child_process.execFile('protractor', ['./src/convertedJs/tempProtractorconfig.js'], (err, stdout, stderr) => {}
以上代码会引发ENOENT错误 但是当我跑步时
child_process.exec('protractor ./src/convertedJs/tempProtractorconfig.js', (err,stdout,stderr) => {}`
一切正常。答案 0 :(得分:3)
使用child_process.exec()和child_process.execFile()之间的区别在于,后者不会产生外壳,而前者会产生外壳。
Nodejs documentation指出:
但是,在Windows上,.bat和.cmd文件在没有终端的情况下无法单独执行,因此无法使用child_process.execFile()启动。在Windows上运行时,可以使用设置了shell选项的child_process.spawn(),child_process.exec()或通过生成cmd.exe并将.bat或.cmd文件作为参数(这是shell选项和child_process.exec()的作用)。
我可以启动它们……虽然不是没有问题。
我的观察:
child_process.execFile('ls', ...)
可以在Linux上运行,而child_process.execFile('dir', ...)
不能在Windows上运行。child_process.execFile('C:\\Users\\Jperl\\AppData\\Roaming\\npm\\protractor.cmd', ...)
可以正常工作! 没有shell意味着我们无权访问path变量。根本不为Windows使用execFile。而是使用spawn
或exec
:
var protractor = child_process.spawn('protractor', ['./src/convertedJs/tempProtractorconfig.js'], {shell: true});
或
var protractor = child_process.spawn('cmd', ['/c', 'protractor', './src/convertedJs/tempProtractorconfig.js']);
答案 1 :(得分:0)
在nodejs v9.5.0中,exec
在文件lib / child_process.js中定义如下
exports.exec = function(command /*, options, callback*/) {
var opts = normalizeExecArgs.apply(null, arguments);
return exports.execFile(opts.file, opts.options, opts.callback);
};
这意味着,最后exec
调用execFile
来执行您的命令,所以在您的情况下,execFile
失败但exec
不是