首先下面代码是有问题,大佬看一下代码,这个输入这里应该有问题,或者这个库不支持这样的持续交互吗?
package mainimport ( "fmt" "io" "os/exec" "time")func main() { // 进行字符串的替换,把小写字母替换成大写字母 cmd := exec.Command("tr", "a-z", "A-Z") var ( err error stdout io.ReadCloser stdin io.WriteCloser ) stdout, err = cmd.StdoutPipe() if err != nil { panic(err) } stdin, err = cmd.StdinPipe() if err != nil { panic(err) } if err = cmd.Start(); err != nil { panic(err) } // 这里协程给tr命令输入标准输入的 小写 abc 字符串 go func() { for { time.Sleep(time.Second) stdin.Write([]byte("abc")) } }() // 然后这里从标准输出读到上面输入后tr命令转换后的大写字符串 ABC,但这里没有读到,不知道为什么 for { data := make([]byte, 512) n, err := stdout.Read(data) fmt.Println(string(data[:n]), err) }}
你如果是想写交互式命令行工具的话,我推荐一个包给你
github.com/AlecAivazis/survey/v2
参考文章你可以看这个
https://blog.csdn.net/zhanggqianglovec/article/details/127986871
这篇文章应该能帮助到你
这段代码的问题在于,stdout
和 stdin
的类型是 io.ReadCloser
和 io.WriteCloser
,但是 StdoutPipe()
和 StdinPipe()
返回的管道类型实际上是 io.Reader
和 io.Writer
。因此,我们需要将 stdout
和 stdin
的类型更改为 io.Reader
和 io.Writer
。
以下是修改后的代码:
package mainimport ( "fmt" "io" "os/exec" "time")func main() { // 进行字符串的替换,把小写字母替换成大写字母 cmd := exec.Command("tr", "a-z", "A-Z") var ( err error stdout io.ReadCloser stdin io.WriteCloser ) stdout, err = cmd.StdoutPipe() if err != nil { panic(err) } stdin, err = cmd.StdinPipe() if err != nil { panic(err) } // 这里协程给tr命令输入标准输入的 小写 abc 字符串 go func() { for { time.Sleep(time.Second) stdin.Write([]byte("abc")) } }() // 然后这里从标准输出读到上面输入后tr命令转换后的大写字符串 ABC for { data := make([]byte, 512) n, err := stdout.Read(data) if err != nil { fmt.Println(err) break } fmt.Println(string(data[:n])) }}
在这个修改后的代码中,我们将 stdout
和 stdin
的类型更改为 io.Reader
和 io.Writer
,然后从 stdout
中读取转换后的大写字符串。现在应该可以正常读取到输出结果了。
我需要用docker exec运行2个命令。我正在从docker容器中复制一个文件,不想处理凭据来使用像ssh这样的东西。此命令复制一个文件: 但它会创建一个子目录var/log,我想避免这种情况,所以如果我可以在docker容器中执行这些操作,我应该很好: 如何让docker exec运行2个命令?
问题内容: 我对通过Python调用控制交互式CLI应用程序感兴趣。 我想在最基本的层次上,我需要一个Python脚本,它将在主机操作系统上启动CLI应用程序。将任何内容从标准输入传送到CLI应用程序,然后将任何输出从CLI应用程序传送到标准输出。 从这个基础上,对输入和输出进行一些处理应该非常简单。 老实说,我可能只需要一个关于该技术被称为的指针。我不知道我要寻找什么。 问题答案: PExpec
MOAC母链客户端使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC VNODE节点,cons
我注册了一个SlashCommand。。。但它的回答是“交互应用程序的命令无效”,有人能帮忙吗。。。
我正在使用discord.js和WOKCommands来使用斜杠命令,但是当在discord中输入时,它给我一个错误“无效的交互应用程序命令” 下面是该命令的代码: 仅当我也需要显示主脚本的代码时,该命令的代码才是命令的代码。我会这样做的。
从v1.1.1开始,应用链客户端SCS也支持使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC