[英]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.