ipdbを使用してPythonスクリプトをデバッグしています。どういうわけか、たとえばコマンドを入力した後、ipdbがコマンドを処理して続行するには、2回n, s, c, b
押す必要があるという問題があります。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.
したがって、次のようになります。
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/
これが問題です。Ctrl+D
プログラムを強制終了するのではなく、途中で待機を削減します。を押すと、入力を待機してCtrl+D
いるプロセスの呼び出しが中断されます。read()
ほとんどのプログラムは、0
バイトを入力として読み取ると中止されます。何かを入力するCtrl+D
前に、入力パイプに0バイトを送信し、プログラムのシャットダウンを引き起こす可能性があります。これにより、何もする必要がないと思われる場合があります。これは強制されません。
ただし、いくつかのキーを押すと、中断Ctrl+D
したread()
呼び出しはそのテキストを返し、基になるプログラムは次のラウンドを待つことを決定します。
そのため、Ctrl+D
新しいテキストを入力せずに再度入力すると、期待どおりの動作が得られます。
これはおそらく起こっていることです:
いくつかの文字を入力すると、バッファリングされます。
あなたCtrl+D
。テキストはに到達しますがiPdb
、改行を検出しないため、さらに待機します。
もう一度Ctrl+D
。今回は0
バイトがに達しますiPdb
。これは、これ以上何も来ないと想定し、改行の有無にかかわらずテキストを処理します。