我想使用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) => {}`一切都很好。
有人能解释一下发生了什么吗?
发布于 2019-08-06 00:01:23
使用child_process.exec()和child_process.execFile()之间的区别在于后者不会产生外壳,而前者会。
Nodejs documentation状态:
但是,.bat和.cmd文件在没有终端的情况下不能单独执行,因此不能使用child_process.execFile()启动。在Windows上运行时,可以使用带有外壳选项集的child_process.spawn()调用.bat和.cmd文件,使用child_process.exec(),或者生成cmd.exe并将.bat或.cmd文件作为参数传递(这就是外壳选项和child_process.exec()所做的事情)。
我可以发射它们。但也不是没有问题。
我的观察:
运行以下shell的
child_process.execFile('dir', ...)不能在Windows上运行variable.的完整路径,例如,child_process.execFile('C:\\Users\\Jperl\\AppData\\Roaming\\npm\\protractor.cmd', ...)按预期运行!No child_process.execFile('ls', ...)表示我们没有访问路径shell的权限
根本不要使用execFile for Windows。请改用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']);发布于 2018-03-02 15:14:09
在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没有失败就很奇怪了
发布于 2021-12-01 03:48:04
我在使用"node myfile.js“启动一个节点进程时也遇到了一些问题,但是当我添加node.exe的位置,比如'path of node.exe/node.exe myfile.js‘时,它就像我预期的那样工作得很好
https://stackoverflow.com/questions/46445805
复制相似问题