我正在使用ipdb调试我的Python脚本。不知怎的,我有问题,输入命令后,例如n, s, c, b
等。我必须按两次 Ctrl + D ,以便ipdb处理命令并继续。
知道导致这种情况的原因和如何关闭它?
答案 0 :(得分:2)
此效果不会与ipdb隔离:
技术上,Ctrl-D终止传输,如果结果则仅提高EOF 在空输入缓冲区中。只有在输入任何内容之前按Ctrl-D才会发生这种情况 字符。
做这个实验:
1. At the linux terminal type cat
2. press enter once.
3. enter letters: foo
4. press <Ctrl-D> once, you don't get back to the terminal.
5. press <Ctrl-D> again, you are brought back to the terminal.
所以它看起来像这样:
user@defiant ~ $ cat
foofoouser@defiant ~ $
foo会打印两次,因为第一次按下它会刷新输入。第二次被解释为结束该计划。
如何阻止此行为:
按Ctrl-D时,请勿连接到TTY。这意味着不要使用普通的linux终端。不确定这是否可能。
如何在ipdb中处理命令
按Enter键应处理命令,如视频所示:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/
答案 1 :(得分:1)
这就是事情:Ctrl+D
不会杀死程序,它会在中途停止等待。按Ctrl+D
时,会中断正在等待输入的“read()
来电”。
大多数程序在读取0
个字节作为输入时将中止。如果您在输入任何内容之前Ctrl+D
,您将在输入管道中发送0字节,并且可能诱导关闭程序,这可能会认为没有什么可做的。这不是强制。
但是,如果按某些键,然后按Ctrl+D
,则中断的read()
调用将返回该文本,基础程序决定等待另一轮。
这就是为什么当你Ctrl+D
再次没有输入任何新文本时,你会得到你期望的行为。
这可能是发生的事情:
您键入了一些字符,它们会被缓冲。
你Ctrl+D
。文本到达iPdb
,但它没有检测到换行符,因此等待更多。
您再次Ctrl+D
。这一时间0
个字节到达iPdb
,假设没有更多内容可以处理带有或不带换行符的文本。