2

我正在使用 ipdb 调试我的 Python 脚本。不知何故,我遇到了问题,例如在输入命令后n, s, c, b等。我必须按Ctrl+D两次才能让 ipdb 处理命令并继续。

知道是什么原因造成的以及如何将其关闭吗?

4

2 回答 2

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 中处理命令

按下回车键应处理此处视频所示的命令:http: //www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/

于 2013-02-19T14:53:36.173 回答
1

事情就是这样:Ctrl+D不会杀死程序,它会在中途减少等待。当您按下 时Ctrl+D,您会中断read()正在等待输入的进程调用。

Ctrl+D

0大多数程序在读取字节作为输入时都会中止。如果您Ctrl+D在输入任何内容之前,您将在输入管道中发送 0 个字节,并可能导致程序关闭,这可能会认为没有什么可做的了。这不是强迫的。

但是,如果您按下某些键,那么您中断Ctrl+Dread()呼叫将返回该文本,并且底层程序决定等待下一轮。

这就是为什么,当您Ctrl+D再次不输入任何新文本时,您会得到您期望的行为。

你的情况

这是可能发生的事情:

  1. 您键入一些字符,它们会被缓冲。

  2. Ctrl+D。文本到达iPdb,但它没有检测到换行符,因此它等待更多。

  3. 又是你Ctrl+D。这次0bytes 到达iPdb,它假设没有更多内容,并处理带有或不带有换行符的文本。

于 2013-02-19T15:02:19.390 回答