Python 中的自变形代码可能吗?
Is Self Morphing code in Python possible?
下面的代码写在morph.py文件中:
with open("morph.py", "r+") as f:
old = f.read() # read everything in the file
f.seek(0,2) # rewind
f.write("1") # write the new line before
a="BAD"
a1="Worked"
print a
思路是重写morph.py文件,打印"Worked"文本。
不是这样的,我认为这与 Python 解释器加载文件的方式有关。唯一有意义的是加载整个文件,然后 运行.
有人可以解释一下吗?甚至可以在 python 中使用自变形代码吗?
部分相关问题:
Self decompressing and executing code in python
不是您想要的方式。
在Python开始执行任何一段代码之前,它会将其编译成字节码表示形式,这比逐行读取要快得多。这意味着在 Python 编译文件后,对文件的任何更改都不会反映在 current-运行 代码中。
但是,您可以使用 compile
、exec
或 eval
从字符串中手动加载代码。您可以使用它来创建一个程序,该程序传递自己的源代码,对其进行更改和 returns,然后执行修改后的源代码。
当我运行文件第一次输出时:
BAD
当我 运行 它第二次输出时:
Worked
之后的任何时候都会报错:
... name 'a11' is not defined
当你运行 python一个文件时,它会加载文件,然后将它转换成字节码,然后执行字节码。当您更改文件时,该文件已经进行了转换,因此您看不到任何效果。
下面的代码写在morph.py文件中:
with open("morph.py", "r+") as f:
old = f.read() # read everything in the file
f.seek(0,2) # rewind
f.write("1") # write the new line before
a="BAD"
a1="Worked"
print a
思路是重写morph.py文件,打印"Worked"文本。
不是这样的,我认为这与 Python 解释器加载文件的方式有关。唯一有意义的是加载整个文件,然后 运行.
有人可以解释一下吗?甚至可以在 python 中使用自变形代码吗?
部分相关问题: Self decompressing and executing code in python
不是您想要的方式。
在Python开始执行任何一段代码之前,它会将其编译成字节码表示形式,这比逐行读取要快得多。这意味着在 Python 编译文件后,对文件的任何更改都不会反映在 current-运行 代码中。
但是,您可以使用 compile
、exec
或 eval
从字符串中手动加载代码。您可以使用它来创建一个程序,该程序传递自己的源代码,对其进行更改和 returns,然后执行修改后的源代码。
当我运行文件第一次输出时:
BAD
当我 运行 它第二次输出时:
Worked
之后的任何时候都会报错:
... name 'a11' is not defined
当你运行 python一个文件时,它会加载文件,然后将它转换成字节码,然后执行字节码。当您更改文件时,该文件已经进行了转换,因此您看不到任何效果。