在执行之前获取Python源代码

时间:2019-07-13 20:19:48

标签: python command-line interpreter

我想在解释器开始处理所有信息之前(但从解释器内部)捕获(并在某个阶段进行修改)馈给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)

1 个答案:

答案 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")