子流程.Popen循环时消耗内存

2024-04-25 17:58:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个python脚本来帮助我自动化正在进行的项目。它在一个循环中执行一个Capstone子进程,因为我当时无法安装绑定,从一个二进制文件中读取4个字节并将其作为Capstone输入传递。你知道吗

问题是,我的二进制数据超过了30MB,这导致这个脚本运行了一段时间。所以我让它保持几分钟,当我回来的时候,我的内存使用率是98%。你知道吗

我已经开始使用顶石装订,但我很好奇这里出了什么问题。我的代码在下面。谢谢!你知道吗

import binascii
import subprocess
import sys

def main():
    if len(sys.argv) != 3:
        print(sys.argv[0] + " [binary file] [output file]")
        sys.exit(1)
    hexdata = ""
    f = open(sys.argv[1], "rb")
    if f == None:
        print("Could not open file!")
        sys.exit(1)
    data = f.read()
    f.close()
    x = 0
    out = open(sys.argv[2], "a+")
    while x < len(data):
        for y in xrange(4):
            hexdata += binascii.hexlify(data[x])
            x += 1
        popen = subprocess.Popen(["cstool", "arm64", hexdata], stdout=subprocess.PIPE, universal_newlines=True)
        for line in iter(popen.stdout.readline, ""):
            out.write(line.rstrip()[13:])
        popen.stdout.close()
        hexdata = ""
    out.close()

if __name__ == "__main__":
    main()

编辑:修正了代码。我把它从记忆中写了回来,所以我把它搞砸了。你知道吗


Tags: import脚本closedataifmainstdoutsys
1条回答
网友
1楼 · 发布于 2024-04-25 17:58:33

您忘记了添加popen.kill()popen.terminate()以在反复启动进程之后终止/终止进程。你知道吗

在末尾的while中添加popen.kill()popen.terminate()应该可以杀死剩下的进程。你知道吗

相关问题 更多 >