问题描述
以下代码写在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中包含自变形代码?
部分相关的问题:
1楼
并非以您尝试的方式进行。
在Python开始执行任何代码之前,它将其编译为字节码表示形式,比逐行读取要快得多。 这意味着在Python编译文件后,对文件的任何更改都不会反映在当前运行的代码中。
但是,您可以使用compile
, exec
或eval
从字符串中手动加载代码。
您可以使用它来创建一个程序,该程序将传递其自己的源代码,对其进行更改和返回,然后执行修改后的源代码。
2楼
当我第一次运行文件时,它输出:
BAD
当我第二次运行它时,输出:
Worked
随后的任何时间都会产生错误:
... name 'a11' is not defined
在文件上运行python时,它将加载文件,然后将其转换为字节码,然后执行字节码。 更改文件时,该文件已经过转换,因此看不到任何效果。