我希望我的 python 程序可以实时应用更改,就像 php.ini 一样。所以我写
run.py
来达到这个目的。
大家都说千万不要用exec,那我就用
importlib.reload
,但是有一个问题,print("main1")
会运行两次。
如果我将其放入
if __name__ == '__main__':
,那么它永远不会运行。
如何防止重复运行?
原始main.py
import time
def fun():
print("main2")
while True:
print("main1")
fun()
time.sleep(1)
运行.py
import time
import main
import importlib
while True:
try:
# exec(open("main.py", encoding='utf-8').read())
# fun()
importlib.reload(main)
main.fun()
except:
print("error")
time.sleep(1)
主.py
def fun():
print("main2")
print("main1")
__main__
— 顶级代码环境,特别是惯用用法部分。然后你就会明白为什么Python在这里执行print("main1")
两次:一次来自导入系统(即作为模块),一次来自顶级代码环境(即作为脚本)。
要制作实时重新加载
run.py
中的更改的运行程序脚本 main.py
,您可能需要查看 stdlib 实用程序 runpy。然后你可以像这样构建两个脚本:
main.py
:
def fun():
print("main2")
if __name__ == "__main__":
print("main1")
fun()
run.py
:
import time
import main
import runpy
while True:
try:
runpy.run_module("main", run_name="__main__")
except Exception as err:
print("error", err)
time.sleep(1)