簡體   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