我正在编写一个系统,我将有一个小shell与服务器进行交互,服务器加上其他一些东西会记录一些消息。问题是我得到的东西是这样的:
> lsII 2013-12-07T13:09:05.597 Server waiting for start signal..
> st
> DD 2013-12-07T13:09:07.282 Server got start signal.
DD 2013-12-07T13:09:07.282 Server starting up..
II 2013-12-07T13:09:07.282 Server running..
stop
> II 2013-12-07T13:09:10.25 Server stopping..
exit
我得到了我写的命令,等等。
有没有办法让它看起来更漂亮?比如在底线上有提示,并且日志会显示在它上面吗?我认为可行的唯一解决方案是登录到文件,然后有两个终端,一个用于提示,另一个用于cat
日志文件,我不太喜欢。
答案 0 :(得分:2)
几年前我遇到了一个非常类似的问题。这是我解决它的方式(阅读我的问题,然后是接受的答案):GNU Readline: how to clear the input line?
基本上,您可能会使用select()
多路复用stdin来提示与服务器的网络连接。您可以组织一些内容来记住用户到目前为止输入的内容,如果服务器消息位于中间,则退回行,清除它,打印新服务器消息,然后添加换行符并重新显示用户的输入。这对我来说效果很好,并给出了一个可信的错觉,即服务器消息被打印在提示“上方”。