我在用ipdb調試我的Python腳本。不知怎的,我有問題,即輸入命令後,例如n, s, c, b
等。我必須按Ctrl + D兩次,以便ipdb處理命令並繼續。ipdb需要Ctrl + D才能處理命令
任何想法是什麼原因導致這和我怎麼可以將其關閉?
我在用ipdb調試我的Python腳本。不知怎的,我有問題,即輸入命令後,例如n, s, c, b
等。我必須按Ctrl + D兩次,以便ipdb處理命令並繼續。ipdb需要Ctrl + D才能處理命令
任何想法是什麼原因導致這和我怎麼可以將其關閉?
這種效果不是孤立到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.
所以它看起來像這樣:
[email protected] ~ $ cat
[email protected] ~ $
富印兩次,因爲你按下它的第一次刷新您的輸入。第二次被解釋爲結束程序。
如何制止這種行爲:
不要連接到當你按下Ctrl-d一個TTY。這意味着不要使用普通的linux終端。不知道這是否可能。
如何IPDB
,按enter鍵應該處理的指令通過視頻在這裏所示處理的命令:http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/
謝謝,你是什麼意思,我不應該連接到TTY?我以兩種方式開始調試:(1)在控制檯中輸入'ipdb myscript.py'並(2)添加'import ipdb; pdb.set_trace()'到我的腳本並運行'python myscript.py' – RevMoon 2013-02-19 15:00:21
這是事情:Ctrl+D
不殺程序,它減少一半等待通過。當您按Ctrl+D
時,您會中斷正在等待輸入的進程'read()
調用。當他們讀0
字節輸入
大多數程序將中止。如果你在輸入任何東西之前,你會發送0字節,並且可能誘發關閉程序,這可能認爲沒有什麼可以完成的。這不是被迫。
但是,如果你按下一些鍵,然後Ctrl+D
,read()
調用你中斷將返回該文本,並且底層程序決定等待另一輪。
這就是爲什麼當你再次輸入任何新文字時,你會得到你期望的行爲。
這是什麼可能發生的事情:
你輸入一些字符,他們得到緩衝。
您Ctrl+D
。文本到達iPdb
,但它不檢測換行符,因此它等待更多。
你再次Ctrl+D
。這一次0
字節到達iPdb
,它假設沒有更多東西來處理有或沒有換行符的文本。
@EricLeschinski是的,我明白了。雖然我猜這不能解決我的問題,是嗎? – RevMoon 2013-02-19 14:52:54