You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何获取命令执行结果并屏蔽ChildProcess属性输出

解决Node.js中exec命令输出干扰问题
  • 问题根源:

    1. 导入并打印了process.stdout,输出了Node.js标准输出流对象,属于多余干扰内容。
    2. exec是异步方法,直接打印返回的ChildProcess实例(commandOutput),会先输出进程对象信息,之后才执行回调里的命令结果输出。
  • 解决方案:

    1. 移除const { stdout } = require('process');和对应的console.log(stdout);语句,消除不必要的输出。
    2. 不要打印commandOutput,它是进程实例而非命令执行结果。
    3. 若适配交互场景的同步需求,可改用execSync,代码更简洁且避免异步顺序问题。

异步修正版代码

const prompt = require('prompt-sync')({ sigint: true });
const { exec } = require('child_process');

const pathToElevate = Number(prompt('1- suid -2 binary root 3- cap: '))
const userPassword = prompt('Please put the user password(optinal): ')

if (pathToElevate === 1) {
    exec('ls', (error, stdout, stderr) => {
        if (error) {
            console.log(`error ${error.message}`)
            return;
        }
        if (stderr) {
            console.log(`stderr ${stderr.message}`)
            return;
        }
        console.log(stdout) // 仅输出命令执行结果
    })
}

同步简化版代码(更适配交互场景)

const prompt = require('prompt-sync')({ sigint: true });
const { execSync } = require('child_process');

const pathToElevate = Number(prompt('1- suid -2 binary root 3- cap: '))
const userPassword = prompt('Please put the user password(optinal): ')

if (pathToElevate === 1) {
    try {
        const stdout = execSync('ls');
        console.log(stdout.toString()); // 转换为字符串输出命令结果
    } catch (error) {
        console.log(`error ${error.message}`);
        console.log(`stderr ${error.stderr.toString()}`);
    }
}

内容的提问来源于stack exchange,提问作者Jason Hudson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:25:51