2

ipdbを使用してPythonスクリプトをデバッグしています。どういうわけか、たとえばコマンドを入力した後、ipdbがコマンドを処理して続行するには、2回n, s, c, b押す必要があるという問題があります。Ctrl+D

これを引き起こす原因と、それをオフにする方法はありますか?

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は、最初に押したときに入力がフラッシュされたため、2回出力されます。2回目は、プログラムの終了と解釈されます。

この動作を停止する方法:

Ctrl-Dを押しているときは、TTYに接続しないでください。つまり、通常のLinuxターミナルを使用しないでください。これが可能かどうかはわかりません。

ipdbでコマンドを処理する方法

Enterキーを押すと、次のビデオに示されているようにコマンドが処理されます: 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+Dしたread()呼び出しはそのテキストを返し、基になるプログラムは次のラウンドを待つことを決定します。

そのため、Ctrl+D新しいテキストを入力せずに再度入力すると、期待どおりの動作が得られます。

あなたの場合

これはおそらく起こっていることです:

  1. いくつかの文字を入力すると、バッファリングされます。

  2. あなたCtrl+D。テキストはに到達しますがiPdb、改行を検出しないため、さらに待機します。

  3. もう一度Ctrl+D。今回は0バイトがに達しますiPdb。これは、これ以上何も来ないと想定し、改行の有無にかかわらずテキストを処理します。

于 2013-02-19T15:02:19.390 に答える