コンソール プログラムを実行し、その出力を「out」ファイルと「err」ファイルに送信し、「in」ファイルから入力を取得できる簡単なデバッガ プログラムを作成しました。ここで、その機能を拡張して Python スクリプトを実行したいと考えています。これを行うには、デバッガーで Python インタープリターを実行し、Python インタープリターとファイルをやり取りするだけでよいと考えています。
しかし、Python インタープリターをデバッガーで実行すると、通常のプログラムのように出力が表示されません。デバッガーには非常に詳細なエラー ログがあり、エラー ログ ファイルにエラーはありません。
私は "ps -A" を使用しましたが、デバッガーが Python インタープリターを開始したように見えるのは、次の 2 つの理由からです。ファイル記述子が接続されていることを伝えます)。ps -All の出力は次のとおりです。
1 R 0 1565 1 88 80 0 - 1040 - pts/0 00:01:45 debugger
0 S 0 1566 1565 0 80 0 - 7782 pipe_w pts/0 00:00:00 python.out
そして、デバッガーは次のように開始されます ( python.out は python インタープリターのコピーです):
debugger python.out
私の質問は、なぜこれが機能しないのか誰か知っていますか? Python インタープリターは、標準のファイル記述子に対して奇妙なことをしますか?
編集:
また、python.out が python.out > out_file を使用して IO をリダイレクトできないことにも気付きました。これは、デバッガーが抱えている問題に関連している場合と関連していない場合があります。
デバッガーはブロック バッファリングを使用しません。
/proc/pid/io からの io 情報は次のとおりです。
デバッガー (長さ 21 のデータを「in」ファイルに書き込みました)
rchar: 21
wchar: 21
syscr: 300222462
syscw: 1
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
Python インタープリター
rchar: 517268
wchar: 0
syscr: 93
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0