繁体   English   中英

Nodejs:来自 child_process 的 Exec 返回 bin/sh:1:找不到命令但在终端中手动写入时有效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM