ShellJs 执行 CLI 命令
ShellJs execute CLI command
我正在使用 codeceptjs
和 shelljs
。
在其中一个测试中,我调用了 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")
}
}
}()
}
在撰写此答案时,通过 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
了解更多详情。
我正在使用 codeceptjs
和 shelljs
。
在其中一个测试中,我调用了 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")
}
}
}()
}
在撰写此答案时,通过 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
了解更多详情。