首先,类似的问题,没有答案:
Node.js child_process.spawn() fail to run executable file
node.js child_process.spawn ENOENT error - only under supervisord
我有一个.linux
扩展名的可执行文件。它是http服务器。
service.linux
我可以这样运行:
$ ./service.linux
2018/01/11 18:32:56 listening on port 8080
但由于它不是命令,我无法将其作为一个衍生过程启动:
let cp = spawn('service.linux', [], { cwd: __dirname });
我得到的错误是:
service.linux: command not found
ERROR: Error: spawn service.linux ENOENT
如何将其作为命令运行?或者我应该使用其他命令来运行它,例如:
$ start service.linux
UPD:
$ file service.linux
service.linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
UPD:
它需要绝对路径:
const path = require('path');
let cp = spawn(path.resolve(__dirname, `service.linux`), [], { cwd: __dirname });
答案 0 :(得分:1)
尝试使用Decimal.js并在二进制名称前面写./
:
const { exec } = require("child_process");
exec("./service.linux", (err, data) => {
if (err) return console.log(err);
console.log(data);
});
假设文件与脚本位于同一目录中。
错误ENOENT
表示“错误无条目”,因此它基本上找不到命令。
这就是我们指定"./"
的原因。这样它就会把它作为一条路径来处理。
答案 1 :(得分:1)
这是一个路径问题,节点无法找到service.linux文件,使用绝对路径,问题将得到解决