为了账号安全,请及时绑定邮箱和手机立即绑定

在传递给命令之前操作/读取

在传递给命令之前操作/读取

Go
慕码人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()

}


查看完整回答
反对 回复 2022-07-25
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信