ShellJs 执行 CLI 命令

ShellJs execute CLI command

我正在使用 codeceptjsshelljs

在其中一个测试中,我调用了 go 应用程序,如下所示:

const shell = require('shelljs')


shell.exec('./myGoApplication')

当应用程序启动并正常工作时,我有一个 CLI 正在通过键盘侦听来自控制台的输入,因此我可以键入文本并且我的应用程序正在获取它。

但是当我执行这个命令时,它似乎没有传输到输入,应用程序也没有调用命令。

shell.exec('my text')

有人知道如何让 shellJs 向我的 CLI 发出命令等待控制台输入吗?

进入客户端:


func StartCLI(relay RelayConn) {
    go func() {
        fmt.Println("[?] To see avaliable commands write /?")
        reader := bufio.NewReader(os.Stdin)
        for {
            text, _ := reader.ReadString('\n')
            text = strings.Trim(text, "\n")

            switch true {
            case strings.HasPrefix(text, "/?"):
                fmt.Println(helpText)
    
            default:
                relay.Chat("Default Member Simulation chat message")
            }
        }
    }()
}

https://github.com/shelljs/shelljs

在撰写此答案时,通过 exec 启动的进程不可能接受输入。有关详细信息,请参阅 issue #424

来自ShellJS FAQ:

We don't currently support running commands in exec which require interactive input. The correct workaround is to use the native child_process module:

child_process.execFileSync(commandName, [arg1, arg2, ...], {stdio: 'inherit'});

Using npm init as an example:

child_process.execFileSync('npm', ['init'], {stdio: 'inherit'});

因此您的代码应该是这样的:

const child_process = require('child_process')

child_process.execFileSync('./myGoApplication', {stdio: 'inherit'})

设置stdio option'inherit'表示子进程的stdin,stdout,stderr发送给父进程'(process.stdin,process.stdout,和 process.stderr),所以你应该能够在你的 Node.js 程序中输入输入,以将其发送到你的 Go 程序。

请参阅 documentation on child_process.execFileSync 了解更多详情。