2011-12-26 10 views
2

私はptyのマスターエンドのファイル記述子を持っています。このptyはライブラリ(libvte)によってサブプロセスを生成して実行するために使用されます。PTYのマスター側に到着するデータのコピーを読むにはどうすればよいですか?

  • ファイル記述子またはその複製からポーリングして読み取ることはできますが、データはライブラリには届きません。

  • 私はファイル記述子からポーリングして読み込み、マスターに書き戻すことができますが、私自身のデータを読み返すための厄介なループが発生し、元のライブラリに何も流れません。

ptyの基本機能に干渉することなくデータのコピーを読むことができるソリューションはありますか?

私はPythonを使用していますが、このレベルでは本当に重要ではないと思います。

+0

共有できるコードがありますか? – jcollado

+0

import vte; t = vte.Terminal(); fd = t.get_pty(); #今fdから読む –

答えて

1

pyptyプログラムをチェックアウト - それはPythonでPTY通信の両端を示しているので、それは、余分な機能のビットとは/ usr/binに/スクリプトのPythonの再実装です:

ところで、(との間で信号の用心比較的)裸のシステムコール - 部分的にしか完了しないときに戻ることがあります。特にmaybe_restarted_syscall関数を参照してください。ウィンドウのサイズを変更するだけで、PTYを使用するときに信号が配信される傾向があります。

+0

ありがとう、それはかなりクールですが、私はそれが私の質問に答えるかわからない、私は唯一の読み取りと書き込み、stdinから読んで、stdoutに書き込む(別のファイル)。あなたは私よりもはるかに熟練しているので、間違っていると思いますが、説明してください。 –