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 關注
- 146 瀏覽
添加回答
舉報