我想基于python创建自己的编程语言,它将提供python不提供的其他功能,例如使用自定义语法创建多行匿名函数。我希望我的编程语言使用起来非常简单,只需导入我的脚本,然后我读取导入我脚本的脚本文件,然后处理它的代码并停止执行脚本调用我的脚本来防止语法错误...
假设有2个py文件,main.py
和MyLanguage.py
main.py导入了MyLanguage.py
如果main.py
可以是另一个名称(动态名称),那么如何从MyLanguage.py
获取main.py
文件?
其他信息: 我在Windows 7上使用python 3.4.4
答案 0 :(得分:3)
像Colonder一样,我相信你想到的项目比你想象的要困难得多。
但是,为了帮助您入门,以下是从main.py
内部获取MyLanguage.py
文件的方法。如果您的导入模块看起来像这样
# main.py
import MyLanguage
if __name__ == "__main__":
print("Hello world from main.py")
,它导入的模块在Python 3中是这样的:
#MyLanguage.py
import inspect
def caller_discoverer():
print('Importing file is', inspect.stack()[-1].filename)
caller_discoverer()
在Python 2中或(编辑),如此:
。#MyLanguage.py
import inspect
def caller_discoverer():
print 'Importing file is', inspect.stack()[-1][1]
caller_discoverer()
然后运行main.py
时得到的输出是
Importing file is E:/..blahblahblah../StackOverflow-3.6/48034902/main.py
Hello world from main.py
我相信这回答了你提出的问题,尽管我认为它并没有达到你想要的目标。我怀疑的原因很简单:import
语句需要一个包含有效Python的文件,如果你想用你自己的非Python语法导入文件,那么你将不得不做一些非常聪明的东西与导入钩子。如果没有这个,你的程序将在import
语句中失败并出现语法错误。
祝你好运。