gpt4 book ai didi

python - 使用 subprocess.Popen() 或 subprocess.check_call() 时程序卡住

转载 作者:行者123 更新时间:2023-11-30 23:25:59 26 4
gpt4 key购买 nike

我想从 python 运行一个程序并找到它的内存使用情况。为此,我正在使用:

l=['./a.out','<','in.txt','>','out.txt']
p=subprocess.Popen(l,shell=False,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
p.wait()
Res= getrusage(resource.RUSAGE_CHILDREN)
print Res.ru_maxrss

我还尝试使用check_call(l,shell=False,stdout = subprocess.PIPE, stderr = subprocess.PIPE)并删除 p.wait 但问题是程序在使用 Popen 时卡在 p.wait() 和 check_call() 处当使用 check_call() 时。我无法弄清楚为什么会发生这种情况。我的论点列表是否错误?

命令./a.out < in.txt > out.txt在终端上工作正常。我正在使用 Ubuntu

最佳答案

有两个问题(至少):

  1. < , >重定向由 shell 处理。 subprocess默认情况下不会生成 shell(您也不应该生成 shell)
  2. 如果stdout=PIPE , stderr=PIPE那么你必须从管道中读取,否则进程可能会永远阻塞

要使子进程从文件读取并写入文件:

from subprocess import check_call, STDOUT

with open('in.txt') as file, open('out.txt', 'w') as outfile:
check_call(["./a.out"], stdin=file, stdout=outfile, stderr=STDOUT)

stderr=STDOUT合并标准输出、标准错误。

关于python - 使用 subprocess.Popen() 或 subprocess.check_call() 时程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com