【问题标题】:How To Get The Correct NodeJS Child Process.spawn Output如何获得正确的 NodeJS Child Process.spawn 输出
【发布时间】:2020-10-28 17:57:32
【问题描述】:

我正在尝试通过 child_process 模块从 NodeJS 运行 ls -la。但是,当我运行它时,它可以工作,但它没有给我正确的输出。相反,我得到了这个:

我希望结果看起来更像这样:

这是我的代码:

const child_process = require("child_process")


function runShell(command) {
    let shellCommand = command.split(" ")[0]
    let commandArgs = command.split(" ").slice(1, command.length)
    let script = child_process.spawn(shellCommand, commandArgs)
    
    script.stdout.on("data", (data) => {
        console.log(data)
    })

    script.stderr.on("data", (data) => {
        console.warn(`Error: ${data}`)
    })

    script.on("close", (code) => {
        console.log(`Script Ended On code ${code}`)
    })
}
runShell("ls -la")

我做错了什么?我该如何解决?

【问题讨论】:

    标签: node.js terminal child-process


    【解决方案1】:

    我想通了。所以你需要做的是出于某种原因,console.logstdout 数据不起作用,除非你把它放在一个字符串中。 新准则是:

    const child_process = require("child_process")
    
    
    function runShell(command) {
    
        let shellCommand = command.split(" ")[0]
        let commandArgs = command.split(" ").slice(1, command.length)
        let script = child_process.spawn(shellCommand, commandArgs)
        
        script.stdout.on("data", (data) => {
            console.log(`${data}`) # This has been changed
        })
    
        script.stderr.on("data", (data) => {
            console.warn(`Error: ${data}`)
        })
    
        script.on("close", (code) => {
            console.log(`Script Ended On code ${code}`)
        })
    }
    runShell("ls -la")
    

    我不是 100% 确定为什么要打印正确的输出。

    编辑:

    更好的解决方案是让 nodejs 处理所有的标准 IO。 新代码将是:

    function runShell(command){
        let shellCommand = command.split(" ")[0]
        let commandArgs = command.split(" ")
        commandArgs.shift()
    
        const executeCommand = spawn(shellCommand, commandArgs, {
            stdio: [process.stdin, process.stdout, process.stderr]
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多