2024-10-02 00:23:32 发布
网友
我正在用ipdb调试Python脚本。不知怎么的,我有一个问题,在输入一个命令后,例如n, s, c, b等,我必须按两次Ctrl+D以便ipdb处理该命令并继续。在
n, s, c, b
我怎么能关掉这个念头?在
问题是:Ctrl+D不会杀死程序,它会在中途缩短等待时间。当您按Ctrl+D时,您将中断正在等待输入的进程'read()调用。
Ctrl+D
read()
大多数程序在读取0字节作为输入时将中止。如果您Ctrl+D在输入任何内容之前,您将向输入管道发送0个字节,并且可能会导致程序关闭,这可能会认为没有什么事情要做了。这不是强迫的。
0
但是,如果您按一些键,然后Ctrl+D,您中断的read()调用将返回该文本,并且底层程序决定等待下一轮。
这就是为什么,当您再次Ctrl+D而不输入任何新文本时,您将获得预期的行为。
这就是可能发生的事情:
你输入一些字符,它们就会被缓冲。
你Ctrl+D。文本到达iPdb,但它没有检测到新行,因此它等待更多。
iPdb
你又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.
所以看起来像这样:
foo被打印了两次,因为第一次按foo会刷新输入。第二次被解释为结束程序。
如何阻止这种行为:
按Ctrl-D时不要连接到TTY,这意味着不要使用普通的linux终端。不知道这是否可能。
如何在ipdb中处理命令
按enter应该处理如下视频所示的命令:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/
问题是:
Ctrl+D
不会杀死程序,它会在中途缩短等待时间。当您按Ctrl+D
时,您将中断正在等待输入的进程'read()
调用。Ctrl+D组合键
大多数程序在读取
0
字节作为输入时将中止。如果您Ctrl+D
在输入任何内容之前,您将向输入管道发送0个字节,并且可能会导致程序关闭,这可能会认为没有什么事情要做了。这不是强迫的。但是,如果您按一些键,然后
Ctrl+D
,您中断的read()
调用将返回该文本,并且底层程序决定等待下一轮。这就是为什么,当您再次
Ctrl+D
而不输入任何新文本时,您将获得预期的行为。你的案子
这就是可能发生的事情:
你输入一些字符,它们就会被缓冲。
你
Ctrl+D
。文本到达iPdb
,但它没有检测到新行,因此它等待更多。你又
Ctrl+D
。这一次0
字节到达iPdb
,它假设没有更多的内容出现,并处理文本,不管是否有新行。这种影响并不孤立于ipdb:
从技术上讲,Ctrl-D终止传输,并且只有在这一结果发生时才会提高EOF 在空的输入缓冲区中。只有在输入任何 字符。
做这个实验:
所以看起来像这样:
^{pr2}$foo被打印了两次,因为第一次按foo会刷新输入。第二次被解释为结束程序。
如何阻止这种行为:
按Ctrl-D时不要连接到TTY,这意味着不要使用普通的linux终端。不知道这是否可能。
如何在ipdb中处理命令
按enter应该处理如下视频所示的命令:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/
相关问题 更多 >
编程相关推荐