簡體   English   中英

Subprocess.Popen 讀取標准輸出但執行未完成

[英]Subprocess.Popen reading stdout but execution not finishing

使用 subprocess.Popen 時遇到一些麻煩。

這是我正在使用的代碼:

def parse_replay(rep_record):
    rep_path = rep_record['rep_path']
    screp_cmd = f"{cwd}/screp -cmds -mapres -maptiles '{rep_path.replace('..', os.path.dirname(cwd))}'"
    p = subprocess.Popen(screp_cmd, shell=True)
    out = p.stdout.read()
    rep_action_log = json.loads(out)
    return rep_action_log

如果我使用 shell=False 我得到一個文件未找到錯誤。 使用 shell=True 時,命令被執行,但 function 沒有返回(它顯然一直在監聽命令的 output)。

你知道有什么方法可以在正確完成我的 function 的執行的同時捕獲我的命令的標准輸出嗎?

PS:screp 是一個 CLI,它輸出 json 信息到標准輸出https://github.com/icza/screp

所以查爾斯的評論有效!

標記列表中的第一個格式可讓您避免使用 shell=True。 第二個 stoud=subprocess.PIPE 讓您捕獲標准輸出。

def parse_replay(rep_record):
    rep_path = rep_record['rep_path']
    screp_cmd = [f"{cwd}/screp", "-cmds", "-mapres", "-maptiles", f"{rep_path.replace('..', os.path.dirname(cwd))}"]
    p = subprocess.Popen(screp_cmd, stdout=subprocess.PIPE)
    out = p.stdout.read()
    rep_action_log = json.loads(out)
    return rep_action_log

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM