我正在编写脚本并使用-i参数运行它,以便在完成后保持repl打开,以便能够查看有关我在调试时使用的对象的信息。
为了避免必须退出并重新运行脚本,我发现我可以修改并保存脚本,然后导入[script-name],然后使用[script-name]调用我的main方法。 -method]()。
现在我想编写一个单字符方法(为方便起见):
def x():
import [this script]
[this script].[main-method]()
但也可以更改脚本的文件名并保留easy-reloading功能,而无需更改代码。
我尝试过使用importlib(见下文)无济于事。
def y():
import importlib
this = importlib.import_module("".join(sys.argv[0].split(".py"))) # sys.argv[0] gives [module-name].py and the rest of the code inside the parentheses removes the ".py"
this.[main-method]()
答案 0 :(得分:1)
import
,在其任何一个版本中,只重新加载一次脚本。您正在寻找reload
功能:
from importlib import reload
import sys
def main():
pass
def x():
reload(sys.modules[__name__])
main()
此代码将重新加载您当前所在的模块(可能是__main__
)并从中重新运行方法。如果要从解释器中重新加载脚本,请执行以下操作:
>>> from importlib import reload
>>> def x():
... reload(mymodule)
... mymodule.main()
...
>>> import mymodule
>>> mymodule.main()
>>> # Do some stuff with mymodule
>>> x()
如果脚本位于奇怪的位置,您可能必须将import mymodule
替换为mymodule = importlib.import_module("".join(sys.argv[0].split(".py")))
。
来源:
答案 1 :(得分:0)
我做到了!
def x(): # make what I'm doing now at this very moment easier
main()
print("It works!")
def y(): # calls x() after loading most recent version
import importlib
from imp import reload
this = importlib.import_module("".join(sys.argv[0].split(".py"))) # sys.argv gives [module-name].py and the rest of the code inside the brackets removes the ".py"
this = reload(this)
this.x()