ソケットのようにptyを使用しますか?

ソケットのようにptyを使用しますか?

外部プログラムと通信するためのスクリプトセットを作成しています。私の問題は、スクリプトが短時間だけ「アクティブ」ですが(大きなプログラム内でキーを押すと発生します)、外部プログラムは呼び出し間で実行を続ける必要があり、もともとはインタラクティブな使用のために設計されていました(デバッグデバイスを考えています)見て)。 )。

  • このプログラムを実行するためのスクリプトを作成したい場合は、PTYを開き、ここにデータを送受信します。これは機能しますが、(私のスクリプトはLUAにあり、ltyはPTYを処理できます)、スクリプトが終了してもプログラムは実行されません。

  • 外部プログラムが接続するソケットを提供している場合(gdbのように)、名前をどこかに保存し、各スクリプトをそのソケットに接続できます。ただし、これは対話型でのみ使用できます。

外部プログラムを起動してPTYを開き、ソケット自体を受け取るデーモンを書くことができます。その後、スクリプトはデーモンのソケットに接続してデータを送信でき、デーモンはPTYを介してプログラムにデータを渡し、結果を返します。

外部プログラムと交換するデータ型はラインベースですが、1つのコマンドでどのくらいのラインを返すかを事前に知ることはできません。しかし、PTYは問題ではありませんluasocket

これを行うより良い方法があるかどうか疑問に思います。どういうわけかプログラムのPTYを開き、対応する「アドレス」を取得できるので、後でスクリプト内で何度も接続して切断できますか? (一度に1つのスクリプトしか実行できないため、並行性は問題になりません。)これにより、ソケットを完全に使用する必要がなくなります。

socatそれとも、すでにこれを行うことができるいくつかのオプションの組み合わせがありますか?

ベストアンサー1

「プログラムのPTYを開けません」 PTYは擬似端末です。端末が必要です。端末を介してプログラムと直接通信するには、プログラムが端末を作成する必要があります(つまり、端末エミュレータのように動作します)。

代わりにプログラムを実行できます。存在する端末(例:画面。画面を使用すると、簡単に入力を注入し、プログラムの出力を読み取ることができます。

ただし、現在実行中の操作では、端末は無駄な複雑さを引き起こします。ソケットは、2つのプログラム間で直接双方向通信を実行したい作業に最適なツールです。 (一方向通信の場合、パイプは正しいツールになります。)端末を使用する唯一の利点は、エンドの1つを制御せず、出力が制御されない場合に出力バッファリングに固執することです。ターミナルの行ではなく塊として。

おすすめ記事