我正在为一个将文本直接吐出到/ dev / tty的程序的应用程序控制器工作。
这是一个生产应用程序控制器,必须能够捕获所有发送到终端的文本。通常,这不是问题。我们只是重定向stdout和stderr。此特定应用程序直接调用echo并将结果重定向到/ dev / tty(echo "some text" > /dev/tty
)。通过我的应用程序控制器重定向无法捕获文本。
我确实拥有此应用程序的源代码,但我无法修改它,也不再进行维护。关于如何捕获和/或丢弃输出的任何想法?
答案 0 :(得分:4)
screen -D -m yourEvilProgram
应该有效。很多时间过去了,我使用它,但如果你需要阅读它的一些输出,你甚至可以利用一些套接字来读它。
答案 1 :(得分:3)
控制这样的应用程序的经典解决方案是Expect,它设置伪终端,记录并从脚本驱动受控应用程序。它附带了大量的示例脚本,因此您可以根据需要调整一个脚本。
答案 2 :(得分: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
答案 3 :(得分:2)
我无法确定@flolo提到的screen
程序是否能满足您的需要。它可能,但我不确定是否内置了一个日志工具,这似乎是你需要的。
可能已经有一个程序可以满足您的需求。我提名sudosh
作为一种可能性。
如果您最终需要自己编写,您可能需要使用伪tty(pty)并让您的应用程序控制器位于用户的真实终端连接和pty设备之间,它可以在其中记录无论你需要它来记录。这不是微不足道的。您可以在Rochkind的“Advanced UNIX Programming, 2nd Edn”一书中找到有关此内容的信息,毫无疑问其他类似的书籍(史蒂文斯的“UNIX环境中的高级编程”一书很可能是候选人,但我没有副本来验证这一点)。