我有一个 Flask 应用程序,其中更改 DEBUG 标志或禁用重新加载并不实际,并且该应用程序以比flask run
.
@osa 的解决方案在开启烧瓶调试时对我不起作用,因为它没有足够的技巧从重新加载的工作进程中挑选出 werkzeug 观察者进程。
我在我的主包__init__.py
(定义烧瓶应用程序的包)中有这段代码。此代码由另一个小模块运行,from <the_package_name> import app
其后跟app.run(debug=True, host='0.0.0.0', port=5000)
. 因此,此代码在应用程序启动之前执行。
import ptvsd
import os
my_pid = os.getpid()
if os.environ.get('PPID') == str(os.getppid()):
logger.debug('Reloading...')
logger.debug(f"Current process ID: {my_pid}")
try:
port = 5678
ptvsd.enable_attach(address=('0.0.0.0', port))
logger.debug(f'========================== PTVSD waiting on port {port} ==========================')
# ptvsd.wait_for_attach() # Not necessary for my app; YMMV
except Exception as ex:
logger.debug(f'PTVSD raised {ex}')
else:
logger.debug('Starting...')
os.environ['PPID'] = str(my_pid)
logger.debug(f"First process ID: {my_pid}")
os.getpid()
注意:注意和之间的区别os.getppid()
(后者获取父进程的ID)。
我可以在任何时候附加并且效果很好,即使应用程序在我附加之前已经重新加载。我可以分离并重新连接。调试器在重新加载后仍然存在。