Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将自身修改为exe的Python文件?_Python_Self Modifying - Fatal编程技术网

将自身修改为exe的Python文件?

将自身修改为exe的Python文件?,python,self-modifying,Python,Self Modifying,我对自我修改代码的想法感到困惑,我想使用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

我对自我修改代码的想法感到困惑,我想使用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)

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

您需要学习一些好的ol'ANSI LISP。我不是Python高手,但如果您从.exe文件运行此代码,它将不会是“自我修改”,它将使用您提供的代码创建一个新的python文件,除非您也要在输出上运行py2exe,否则它将是自修改的。您可能可以使用shell命令执行此操作,与使用py2exe的方式相同。@geokavel变量self是所有代码都写入的文件名,它会写入自身,并且必须再次运行才能更改输出。请考虑一下,如果您的程序名为train_0.exe,并且它会写入名为train_0.py的文件,谢谢,我只需要知道:)没问题,很高兴它能帮上忙。