亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法捕獲 cmd.Run() stdout,stderr 沒問題

無法捕獲 cmd.Run() stdout,stderr 沒問題

Go
慕碼人8056858 2023-03-07 11:43:26
這個簡單的 python 腳本生成 stdout/stderr 消息,每秒兩條。#!/usr/bin/env python3import sys, timefor a in range(10):    if(a%2==0): print(a, file=sys.stdout)    else: print(a, file=sys.stderr)    time.sleep(0.5)print("This is an STDOUT message")print("This is an STDERR message", file=sys.stderr)sys.exit(1)示例輸出:> ./runstatus.py 0    <- STDOUT, after 0.5s1    <- STDERR, after 0.5s2    <- STDOUT, after 0.5s3    ...456789This is an STDOUT message     <- STDOUTThis is an STDERR message     <- STDERR我需要用 golang 實時捕獲 stdout 和 stderr 輸出,所以我還發現了這個:package mainimport("bufio"; "fmt"; "os/exec";)func readerr(scanner *bufio.Scanner, channel string) {    for scanner.Scan() { fmt.Println(channel, scanner.Text()); }}func main() {    cmd:=exec.Command("./runstatus.py")    stdout, _:=cmd.StdoutPipe()    stderr, _:=cmd.StderrPipe()    scanout:=bufio.NewScanner(stdout)    scanerr:=bufio.NewScanner(stderr)    scanout.Split(bufio.ScanLines)    scanerr.Split(bufio.ScanLines)    go readerr(scanout, "out:")    go readerr(scanerr, "err:")    cmd.Start()    cmd.Wait()}但問題是這只適用于 STDERR?。?!Stderr 是實時的,但 stdout 不是,它在執行結束時突然顛簸:err: 1    <- STDERR, after 1serr: 3    <- STDERR, after 1serr: 5err: 7err: 9out: 0    <- STDOUT, after 5s, from here, the rest just flushes abruptly!out: 2out: 4out: 6out: 8out: This is an STDOUT messageerr: This is an STDERR message我究竟做錯了什么?
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

問題可能是在 Python 中,print標準輸出的輸出被緩沖了。解決方案可能取決于 Python 版本。

例如,使用 -u 選項運行腳本

python -u ./runstatus.py

從 Python 3.3 開始,該print函數有一個flash參數,您可以嘗試使用它:

print(a, file=sys.stdout, flush=True)


查看完整回答
反對 回復 2023-03-07
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號