Python 无法在Django中调试或使用pdb:bdb.bdbGuit
我在docker中使用DjangoPython 无法在Django中调试或使用pdb:bdb.bdbGuit,python,django,debugging,python-3.7,django-2.2,Python,Django,Debugging,Python 3.7,Django 2.2,我在docker中使用Django(2,2,4,'final',0),但我可以在内部使用bash打开或执行所需的任何内容。但我不能调试。(陈述了一些方法,但没有一种适合我) 在我的views.py中,我有各种各样的函数,例如这里的函数 def visGraph(request): showgraph = 'Graphen' selectDB = request.GET.get('selectDB', '') __import__("pdb").set_trace()
(2,2,4,'final',0)
,但我可以在内部使用bash打开或执行所需的任何内容。但我不能调试。(陈述了一些方法,但没有一种适合我)
在我的views.py
中,我有各种各样的函数,例如这里的函数
def visGraph(request):
showgraph = 'Graphen'
selectDB = request.GET.get('selectDB', '')
__import__("pdb").set_trace()
title += " <i>"+showgraph+"</i> ("+selectDB+")"
我假设对于pdb,我需要一个活动的shell,而不仅仅是一个日志查看器,但我不知道该更改什么或如何更改。
但已经尝试过这里给出的答案:
但它只是打开了一个Python Shell。解决方案实际上相当简单。问题在于码头工人。解决方案如下所述,并且有效: 将此添加到docker-compose.yml:
ports:
- "4444:4444"
stdin_open: true
tty: true
安装远程pdb
并使用以下命令代替默认的pdb命令:
__import__("remote_pdb").set_trace(host='0.0.0.0', port=4444)
登录docker并远程登录pdb会话:
telnet 0.0.0.0 4444
如果您知道最终将进入调试器,则可以使用
run
而不是up
$docker compose运行--rm--服务端口django\u web
问题是up
假设它将运行多个服务,即使您告诉它只运行一个服务,它也会为您包装这些服务。这也是它在输出前加上服务名称的原因:
web_1 |一些输出
db| 1 |一些db日志
运行
命令,这样您就可以拥有一个shell和一个调试器,而不会出现问题或远程\u pdb解决方案
注意:使用
run
时,您必须执行此操作,因为并非所有操作都会自动启动。total guess,但请尝试卸载bdp。也许它的终端部分有冲突,idk.pdb在任何其他python代码中都可以正常工作,甚至不能这样启动:错误:没有这样的服务:django_web
,只需在我通常使用的文件夹中使用它,就可以在服务上运行一个一次性命令代码>有一些建议…第一部分建议您在docker compose.yml
中为该特定服务使用不同的名称(或者您没有在项目文件夹中运行它?)。第二部分建议您没有为服务指定命令?类似于命令:[“python”、“manage.py”、“runserver”、“0:8080”]
在您的docker compose.yml中为django提供的服务下。如果您愿意,您确实可以指定定制的一次性命令,如:docker compose run--rm--service ports django\u web my\u custom\u command
,它会覆盖docker compose.yml
中的默认命令。大约两个月前就解决了。查看我自己的答案是的,我已经阅读了您的答案(我甚至在原始答案中引用了它),但除非您无法控制docker容器的启动方式,否则我建议不要安装额外的依赖项,而只使用docker提供给您的内容,因为如果您正确调用docker compose,它确实可以工作。
__import__("remote_pdb").set_trace(host='0.0.0.0', port=4444)
telnet 0.0.0.0 4444