我正在使用 ipdb 调试我的 Python 脚本。不知何故,我遇到了问题,例如在输入命令后n, s, c, b
等。我必须按Ctrl+D两次才能让 ipdb 处理命令并继续。
知道是什么原因造成的以及如何将其关闭吗?
这种影响并不孤立于 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 中处理命令
按下回车键应处理此处视频所示的命令:http: //www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/
事情就是这样:Ctrl+D
不会杀死程序,它会在中途减少等待。当您按下 时Ctrl+D
,您会中断read()
正在等待输入的进程调用。
0
大多数程序在读取字节作为输入时都会中止。如果您Ctrl+D
在输入任何内容之前,您将在输入管道中发送 0 个字节,并可能导致程序关闭,这可能会认为没有什么可做的了。这不是强迫的。
但是,如果您按下某些键,那么您中断Ctrl+D
的read()
呼叫将返回该文本,并且底层程序决定等待下一轮。
这就是为什么,当您Ctrl+D
再次不输入任何新文本时,您会得到您期望的行为。
这是可能发生的事情:
您键入一些字符,它们会被缓冲。
你Ctrl+D
。文本到达iPdb
,但它没有检测到换行符,因此它等待更多。
又是你Ctrl+D
。这次0
bytes 到达iPdb
,它假设没有更多内容,并处理带有或不带有换行符的文本。