慕碼人2483693
2022-07-25 10:22:16
如何從傳遞給命令標準輸入的連接中讀取/操作輸入?例如,給定以下代碼。 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 的連接中讀取,然后將其傳遞給 Command 第二個參數 params,但我希望有一個更好的解決方案,它不需要我處理命令中 args 輸入的所有不同情況,而只是傳遞分析輸入后將其發送到標準輸入
1 回答

www說
TA貢獻1775條經驗 獲得超8個贊
好的,因為您在評論中提到“我真正的問題是如何攔截來自連接的輸入,對其進行解析并將其解析為命令的標準輸入。似乎當我執行 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()
}
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消