[英]Nodejs: Exec from child_process returns bin/sh: 1: command not found but works when writing manually in terminal?
使用 Node.js 在树莓派的终端中自动执行命令,但它不能与 exec(command) 一起使用。 它输出 bin/sh: 1: command not found when trying to catch the output. 但是在终端中手动编写命令时该命令有效?
这是为什么?
async function run_command_fuel() {
const command = "weconnect-cli PASSWORDINFORMATION get /vehicles/SECRETNUM/domains/fuelStatus/rangeStatus/primaryEngine/remainingRange_km";
let returnval = 0;
let child = exec(command);
await new Promise((resolve, reject) => {
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
returnval = data;
console.log(returnval);
resolve();
});
child.stderr.on('data', function(data) {
console.log('stderr: ' + data);
reject();
});
child.on('close', function(code) {
console.log('closing code: ' + code);
});
})
return returnval;
}
运行 exec 命令会创建一个新的 shell,它不会与您的节点进程具有相同的环境。 您需要指定PATH
环境变量才能使用该命令。
Node 为您提供了一种方法,通过您在 exec 命令中传递的 object 作为第二个参数来执行此操作,该参数默认为process.env
。
传入 object:
const command = "weconnect-cli PASSWORDINFORMATION get /vehicles/SECRETNUM/domains/fuelStatus/rangeStatus/primaryEngine/remainingRange_km";
let child = exec(command, {env: {'PATH': 'path/to/command'}});
另一种方法是在命令前通过标准 shell env 设置。 您可以将命令修改为:
const env_vars = 'PATH=' + 'path/to/command' + ' ';
const command = "weconnect-cli PASSWORDINFORMATION get /vehicles/SECRETNUM/domains/fuelStatus/rangeStatus/primaryEngine/remainingRange_km";
let child = exec(env_vars + command);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.