捕获直接redirect到/ dev / tty

我正在为一个将文本直接分发到/ dev / tty的程序的应用程序控制器工作。

这是一个生产应用程序控制器,必须能够捕捉到terminal的所有文本。 一般来说,这不是一个问题。 我们只是redirectstdout和stderr。 这个特定的应用程序直接调用echo并将结果redirect到/ dev / tty( echo "some text" > /dev/tty )。 通过我的应用程序控制器redirect没有抓住文本。

我确实有这个应用程序的来源,但是我不能修改它,也不能再维护它。 有关如何捕捉和/或丢弃输出的想法?

我无法确定@ flolo提到的screen程序是否会执行您所需要的操作。 它可能,但我不确定是否有内置的日志工具,这似乎是你所需要的。

可能有一个计划已经在那里做你所需要的。 我会提名sudosh作为一种可能性。

如果最终需要编写自己的代码,则可能需要使用伪tty(pty),并让应用程序控制器位于用户的真实终端连接和pty设备之间,在那里它可以记录所需的任何内容它来记录。 这不是微不足道的。 你可以在Rochkind的“ 高级UNIX编程第二版 ”一书中找到关于这方面的信息,毫无疑问,其他类似的书(Stevens的“UNIX环境下的高级编程”)是一个可能的候选人,但是我没有验证)。

  screen -D -m yourEvilProgram 

应该管用。 我用了很多时间,但是如果你需要阅读它的一些输出,你甚至可以利用一些套接字来读取它。

[ 新增 :两个链接, Rackaid和Pixelbeat ,以及GNU的主页]

控制这种应用程序的经典解决方案是Expect ,它设置伪终端,记录日志,并从脚本驱动受控程序。 它带有大量的示例脚本,所以你可能只是适应一个,以适应您的需求。

这是我在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