我想在解释器开始处理所有信息之前(但从解释器内部)捕获(并在某个阶段进行修改)馈给Python解释器的代码。
我想到的用例如下:
python "import black_magic; ... some python code ..."
和import black_magic
实际上会捕获并处理后面的所有内容,然后再将其反馈给Python解释器。
例如,类似这样的东西(我知道这是一个愚蠢的例子):
python "import black_magic; print(voodoo)"
,并且print(voodoo)
代码变成print("Voodoo magic")
。
一个更简单的例子是:
python "import black_magic; for i in 1:100: print(i)"
以便将1:100
转换为range(1:100)
。
然后的问题是:我应该在black_magic
模块中写些什么,以确保在被解释之前抓住for i in 1:100: print(i)
?
答案 0 :(得分:0)
我有一个名为X
的文件,其中包含vd2.py
。
我还有一个名为print("Hello World")
的文件,其中包含:
vd1.py
现在我可以从本地目录中的命令行键入import argparse
import system
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
val = open(args.filename, 'r')
lines = val.readlines()
val.close()
val2 = open("vd2.py", 'w')
replacelist = ["Hello World"]
replacewith = ["Voodoo"]
for j in range(len(replacelist)):
for i in range(len(lines)):
if replacelist[j] in lines[i]:
lines[i] = lines[i].replace(replacelist[j], replacewith[j])
val2.write(lines[i])
val2.close()
os.system("python3 " + args.filename)
,它将python3 vd1.py vd2.py
的内容更改为vd2.py
。
输出为print("Voodoo")
。