为什么这个Python脚本会耗尽内存?

-3 投票
1 回答
699 浏览
提问于 2025-04-18 13:20

我对Python几乎一无所知,所以我来这里请教大家怎么解决这个问题。我会提供一些文件片段,这些应该足够你们解决这个问题。

main.py - 负责所有的日志记录,完成所有的工作

commands.logger.info('> Applying SpecialSource')
        commands.applyss(side, keep_lvt=keep_lvt, keep_generics=keep_generics)

commands.py - 包含所有的定义

def applyss(self, side, reobf=False, srg_names=False, in_jar=None, out_jar=None, keep_lvt=False, keep_generics=False):
        """Apply ss to the given side"""
        cplk = {CLIENT: self.cpathclient, SERVER: self.cpathserver}
        cfgsrg  = {CLIENT: self.srgsclient, SERVER: self.srgsserver}
        deobsrg = {CLIENT: self.deobsrgclient, SERVER: self.deobsrgserver}
        reobsrg = {CLIENT: self.reobsrgclient, SERVER: self.reobsrgserver}
        rsrgsrg = {CLIENT: self.reobsrgclientsrg, SERVER: self.reobsrgserversrg}
        if in_jar is None:
            if reobf:
                in_jar = {CLIENT: self.cmpjarclient, SERVER: self.cmpjarserver}[side]
            else:
                in_jar = {CLIENT: self.jarclient, SERVER: self.jarserver}[side]
        if out_jar is None:
            if reobf:
                out_jar = {CLIENT: self.reobfjarclient, SERVER: self.reobfjarserver}[side]
            else:
                out_jar = {CLIENT: self.rgclientout, SERVER: self.rgserverout}[side]
        if reobf:
            cmd = self.cmdssreobf
            if srg_names:
                identifier = 'RGMCPSRG'
                srg = rsrgsrg[side]
            else:
                identifier = 'RGMCP'
                srg = reobsrg[side]
        else:
            cmd = self.cmdss
            identifier = None
            srg = cfgsrg[side]
        # add specialsource.jar to copy of client or server classpath
        sscp = [self.specialsource] + cplk[side]
        sscp = os.pathsep.join(sscp)
        forkcmd = cmd.format(classpath=sscp, injar=in_jar, outjar=out_jar, identifier=identifier, mapfile=srg)
        if not keep_lvt:
            forkcmd += ' --kill-lvt'
        if not keep_generics:
            forkcmd += ' --kill-generics'
        try:
            self.runcmd(forkcmd)
            if not reobf:
                shutil.copyfile(cfgsrg[side], deobsrg[side])
                shutil.copyfile(deobsrg[side], reobsrg[side])
        except CalledProcessError as ex:
            self.logger.error('')
            self.logger.error('== ERRORS FOUND ==')
            self.logger.error('')
            for line in ex.output.splitlines():
                if line.strip():
                    if line[0] != '#':
                        self.logger.error(line)
            self.logger.error('==================')
            self.logger.error('')
            raise

如果你还没搞明白,这个是MCP,也就是Minecraft Coder Pack。问题是,在反编译服务器的jar文件时,在> Applying SpecialSource这个阶段,它会出现内存不足的情况。我不知道哪里会有类似java -jar SpecialSource.jar这样的内容,希望你们能告诉我该去哪里找。

1 个回答

1

先检查一下你的Python是不是最新版本,还有你用的是什么操作系统?我之前也遇到过这个问题,原因是软件过时了,还有MCP把一些库搞错成了Windows,所以导致了一些混乱。如果你是在Mac或者Linux上,可以在你的MCP文件夹里找找“windows”这个词,然后把它换成你自己操作系统的名字。这样做对我有用。

撰写回答