
背景: CLI Python アプリケーションがあります。メイン アプリケーションの CLI に干渉せずにデバッグできるようにしたいと考えています。Python デバッガーを使用すると、デバッガーの代替 stdin/stdout を指定できます。
tmux で新しいペインを開き、pty のファイル名 (/dev/pts/47) を書き留めました。次に、その pty ファイルを Python で読み書きするために開きました。これは正しい方向に進んでいるように見えました。tmux ペインには Python デバッガーからの出力が表示され、入力した文字の一部には応答しましたが、すべてには応答しませんでした。問題は、bash がまだ pty で実行されており、どのプログラムが最初に pty から読み取るかによって、入力の一部が bash に、他の入力が Python に送られていることにあると思います。
tmux/screen/その他のアプリケーションで pty を作成し、シェルを起動せずに別のアプリケーションが pty のスレーブ側を引き継ぐ方法はありますか? これは機能するでしょうか?
プログラムに 2 番目の CLI インターフェイスを開かせるための、より適切な方法は他にもありますか?
(私が試した別の方法は、mkfifo を使用して 2 つの名前付きパイプを作成し、次に を実行することですcat >/tmp/pipe_stdin | cat </tmp/pipe_stdout
。これは機能しましたが、行バッファリングされたため、行編集は機能しません。)
答え1
あなたの問題を正しく理解していれば (私は Python のデバッグ経験がありません)、一見すると、2 つのシェル ウィンドウを使用するのが最も簡単な方法のように思えます。そのうちの
1 つでデバッガー (デバッグするアプリケーションを含む) を実行し、デバッガーの入力/出力を 2 番目のシェルにリダイレクトします。
その後、デバッガーを制御し、1 番目のシェルの出力に影響を与えることなく、2 番目のシェルでその出力を観察できます。