manipulating/reading 在传递给命令之前
manipulating/reading before passing to command
如何 read/manipulate 将来自连接的输入传递给命令标准输入?
例如,给定以下代码。
c, _ := net.Dial("tcp", somehost)
cmd := exec.Command("/bin/sh")
cmd.Stdin, cmd.Stdout, cmd.Stderr = c, c, c
cmd.Run()
如何在将字符串传递给 cmd.Stdin 之前从连接中反转字符串,或者我如何解析字符串而不将其传递给 cmd.Stdin?
我考虑过读取与 bufio 的连接,然后将其传递给命令的第二个参数,params,但我希望有一个更好的解决方案,不需要我处理命令中 args 输入的所有不同情况,而是在分析输入
后将其传递给 Stdin
好的,因为你在评论中提到 “我真正的问题是如何拦截来自连接的输入,解析它并将其解析为命令的标准输入。似乎当我这样做时 cmd.Run() 我阻止了,因此无法真正连续解析"
以下是我的做法:
import (
"io"
"os"
"os/exec"
)
func main() {
//All errors are not checked
cmd := exec.Command("/bin/sh")
cmdStdin, _ := cmd.StdinPipe()
go func() {
defer cmdStdin.Close()
//here you will need to loop on reading the connection,
//for simplicity lets assume you do that & receive data
//let says you got ls from connection
cmdStdin.Write([]byte("ls\n"))
}()
cmdStdout, _ := cmd.StdoutPipe()
go io.Copy(os.Stdout, cmdStdout)
cmd.Run()
}
如何 read/manipulate 将来自连接的输入传递给命令标准输入?
例如,给定以下代码。
c, _ := net.Dial("tcp", somehost)
cmd := exec.Command("/bin/sh")
cmd.Stdin, cmd.Stdout, cmd.Stderr = c, c, c
cmd.Run()
如何在将字符串传递给 cmd.Stdin 之前从连接中反转字符串,或者我如何解析字符串而不将其传递给 cmd.Stdin?
我考虑过读取与 bufio 的连接,然后将其传递给命令的第二个参数,params,但我希望有一个更好的解决方案,不需要我处理命令中 args 输入的所有不同情况,而是在分析输入
后将其传递给 Stdin好的,因为你在评论中提到 “我真正的问题是如何拦截来自连接的输入,解析它并将其解析为命令的标准输入。似乎当我这样做时 cmd.Run() 我阻止了,因此无法真正连续解析"
以下是我的做法:
import (
"io"
"os"
"os/exec"
)
func main() {
//All errors are not checked
cmd := exec.Command("/bin/sh")
cmdStdin, _ := cmd.StdinPipe()
go func() {
defer cmdStdin.Close()
//here you will need to loop on reading the connection,
//for simplicity lets assume you do that & receive data
//let says you got ls from connection
cmdStdin.Write([]byte("ls\n"))
}()
cmdStdout, _ := cmd.StdoutPipe()
go io.Copy(os.Stdout, cmdStdout)
cmd.Run()
}