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