ipdb需要Ctrl+D来处理命令

2024-10-02 00:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用ipdb调试Python脚本。不知怎么的,我有一个问题,在输入一个命令后,例如n, s, c, b等,我必须按两次Ctrl+D以便ipdb处理该命令并继续。在

我怎么能关掉这个念头?在


Tags: 命令脚本ctrlipdb念头
2条回答

问题是:Ctrl+D不会杀死程序,它会在中途缩短等待时间。当您按Ctrl+D时,您将中断正在等待输入的进程'read()调用。

Ctrl+D组合键

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

但是,如果您按一些键,然后Ctrl+D,您中断的read()调用将返回该文本,并且底层程序决定等待下一轮。

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

你的案子

这就是可能发生的事情:

  1. 你输入一些字符,它们就会被缓冲。

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

  3. 你又Ctrl+D。这一次0字节到达iPdb,它假设没有更多的内容出现,并处理文本,不管是否有新行。

这种影响并不孤立于ipdb:

从技术上讲,Ctrl-D终止传输,并且只有在这一结果发生时才会提高EOF 在空的输入缓冲区中。只有在输入任何 字符。

做这个实验:

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.

所以看起来像这样:

^{pr2}$

foo被打印了两次,因为第一次按foo会刷新输入。第二次被解释为结束程序。

如何阻止这种行为:

按Ctrl-D时不要连接到TTY,这意味着不要使用普通的linux终端。不知道这是否可能。

如何在ipdb中处理命令

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

相关问题 更多 >

    热门问题