如何防止python在导入时运行程序?

问题描述 投票:0回答:1

我希望我的 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")
python
1个回答
0
投票

请阅读

__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)
© www.soinside.com 2019 - 2024. All rights reserved.