【问题标题】:Python file that modifies itself as an exe?将自身修改为 exe 的 Python 文件?
【发布时间】:2015-10-14 05:24:12
【问题描述】:

我对自我修改代码的想法感到困惑,我想使用 py2exe 将文件更改为 .exe。我是否仍然可以让代码自行修改,还是需要将其保留为 .py?

自行修改代码:

self = "Strain_0.py"
def Write_self(lis):
    ws = open(self, "a")
    lis.append("t = open('database.txt', 'a')\n")
    lis.append("t.write('Success%s')\n"%(self))
    lis.append("t.close()\n")
    lis.append("ran = success\n")
    lis.append("return ran\n")
    lis.append("    except:\n")
    lis.append("print('failed')\n")
    lis.append("t = open('database.txt', 'a')\n")
    lis.append("ran = 'failed'")
    lis.append("t.write('failed%s')\n"%(self))
    lis.append("t.close()\n")
    lis.append("return ran\n")
    ws.write("def test():\n")
    ws.write("    try:\n")
    for i in lis:
        if i != "except:\n"and "        " not in i:    
            ws.write("        "+i)
        else:
            ws.write(i)

【问题讨论】:

  • 你需要去学习一些好的 ol' ANSI LISP。
  • 我不是 Python 人,但如果您从 .exe 文件运行此代码,它不会“自我修改”,它只会使用您提供的代码创建一个新的 Python 文件,除非你还要在输出上运行 py2exe,然后它会自我修改。
  • 你需要编写文件然后编译它。您可能可以使用 shell 命令执行此操作,就像使用 py2exe 一样。
  • @geokavel 变量 self 是写入所有代码的文件的名称,它写入自身并且必须再次运行才能更改输出。
  • 想一想,如果你的程序叫做 Strain_0.exe 并且它写入一个名为 Strain_0.py 的文件,它不是自修改的。

标签: python self-modifying


【解决方案1】:

我假设这只是一个练习,但是(我认为我根本不会充实这个答案)。如果您使用 pyinstaller(不确定 py2exe,但它可能是相同的想法)来制作 exe,它基本上是一个自解压存档,它将一个 python 解释器和您的源代码提取到一个临时目录(您可以从中检索)环境变量)。找到临时目录后,可以同步调用pyinstaller(修改后)将临时(修改后的)文件重新打包成一个新的exe。

【讨论】:

  • 谢谢,我需要知道的一切:)
  • 没问题,很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2016-11-21
  • 2020-03-26
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多