2 回答
TA贡献1900条经验 获得超5个赞
您应该侦听 stdout 和 stderr 缓冲区,并在它们获取新数据时打印它们。
您可以使用扫描仪扫描缓冲区:
package main
import (
"bufio"
"fmt"
"io"
"os/exec"
)
func main() {
cmd := exec.Command("test.sh")
stdout, _ := cmd.StdoutPipe()
stderr, _ := cmd.StderrPipe()
_ = cmd.Start()
scanner := bufio.NewScanner(io.MultiReader(stdout, stderr))
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
m := scanner.Text()
fmt.Println(m)
}
_ = cmd.Wait()
}
打印数据在缓冲区中显示的状态(因此行与行之间存在休眠状态)
frontend-prod-secret.yaml
backend-prod-secret.yaml
middleware-prod-secret.yaml
apigateway-prod-secret.yaml
TA贡献1827条经验 获得超8个赞
操作系统。StdOut正在寻找一个具有方法的接口,在编写其输出时,它将调用此方法。Write
我想逐行获取此输出并推送到某些位置(例如:套接字)
让我举个例子
import (
"flag"
"github.com/gorilla/websocket"
"net/url"
)
var addr = flag.String("addr", "localhost:12345", "http service address")
// this function allows transmitting of output
// and command as chat message strings
type CommandChat struct {
Conn *websocket.Conn
}
func ChatConnect() (c *CommandChat, err error) {
u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo"}
conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
c = &CommandChat{Conn: conn}
return
}
func (c *CommandChat) Write(input []byte) (n int, err error) {
err = c.Conn.WriteMessage(websocket.TextMessage, input)
return
}
func (c *CommandChat) Rx(resp []byte) (err error) {
return
}
func (c *CommandChat) Close() (err error) { return }
现在您可以分配给CommandChatos.StdOut
chat, err := ChatConnect()
cmd.Stdout = chat
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报