6

/ dev/ttyに直接テキストを吐き出すプログラムのアプリケーションコントローラーに取り組んでいます。

これは、端末に送信されるすべてのテキストをキャッチできる必要がある実稼働アプリケーションコントローラーです。通常、これは問題ではありません。stdoutとstderrをリダイレクトするだけです。この特定のアプリケーションは、echoを直接呼び出し、結果を/ dev / tty(echo "some text" > /dev/tty)にリダイレクトしています。アプリケーションコントローラを介したリダイレクトでテキストをキャッチできません。

私はこのアプリケーションのソースを持っていますが、それを変更する立場にはなく、もう維持されていません。出力をキャッチおよび/または破棄する方法についてのアイデアはありますか?

4

4 に答える 4

4
 screen -D -m yourEvilProgram

動作するはずです。使用してからかなりの時間が経過しましたが、出力の一部を読み取る必要がある場合は、ソケットを使用して読み取ることもできます。

[追加: RackaidPixelbeatの 2 つのリンク、およびGNUのホームページ]

于 2008-11-20T23:51:23.533 に答える
3

このようなアプリケーションを制御するための古典的なソリューションは、疑似端末をセットアップし、ログを記録し、制御されたアプリケーションをスクリプトから駆動するExpectです。多くのサンプル スクリプトが付属しているため、ニーズに合わせて 1 つを調整することができます。

于 2009-09-11T09:39:52.210 に答える
3

これは私がpythonでやったことです

import pty, os

pid, fd = pty.fork()
if pid == 0: # In the child process execute another command
    os.execv('./my-progr', [''])
    print "Execv never returns :-)"
else:
    while True:
        try:
            print os.read(fd,65536),
        except OSError:
            break
于 2010-11-01T21:34:44.623 に答える
2

screen@floloによって言及されたプログラムがあなたが必要とすることをするかどうか私は完全に決定することができません。可能性はありますが、必要なもののように見えるロギング機能が組み込まれているかどうかはわかりません。

おそらく、あなたが必要なことをするためのプログラムがすでにそこにあります。可能性として推薦sudoshします。

独自に作成する必要がある場合は、おそらく疑似tty(pty)を使用し、アプリケーションコントローラーをユーザーの実際の端末接続とptyデバイスの間に配置して、必要なものをログに記録できるようにする必要があります。ログに記録します。それは些細なことではありません。これに関する情報は、Rochkindの「AdvancedUNIX Programming、2nd Edn」の本、および間違いなく他の同様の本で見つけることができます(Stevensの「AdvancedProgramming in the UNIXEnvironment」の本が候補になる可能性がありますが、私はそれを確認する)。

于 2008-11-21T01:13:00.610 に答える