我正在重写一个服务器程序,我想在其中添加一个简单的控制台输入。
目前,它只是提供数据并为它所做的每一件事打印出一两行,作为任何观看/调试的人的描述性措施。
我想要的是有一个始终位于底部的“粘性”输入栏,在其上方出现我的调试打印,以便我可以在程序打印时随时输入命令。这看起来有点像:
...
[88.88.88.88] Handling Connection on Port 11452
[12.12.12.12] Received Data
[44.44.44.44] Sending Disconnect Sequence
>>>Enter Data Here at Any Time
理想情况下,这将在没有诅咒的情况下完成,因为这会使事情复杂化。我觉得我一定缺少一个简单的解决方案。
提前致谢
弗莱迪。
请您参考如下方法:
如果您正在寻找比 curses 稍微高级一点的库,这里有一些,比如 urwid (尽管它们当然不随 Python 一起提供,并且必须安装)。
如果你真的想避免使用窗口库,我想你可以在 screen 下运行服务器,配置了一个输入栏和一个剩余窗口,并为服务器提供了两个虚拟 TTY,而不是正常的输入……但这会增加很多工作,而不是更少。
如果你想进入更低的级别,你总是可以使用 termios,搜索 termcap,并手动编写控制序列来手动处理滚动除最后一行以外的所有内容、移动输入光标等。但这将需要更多的工作。
当然,总是有 super hacky 的可能性:对于每个输出,在每个输入之后,通过发送几百个空白行、重写输出和输入行来“重绘”整个屏幕。这看起来很糟糕,并且在各种边缘情况下都不起作用,但它确实避免了任何类型的窗口化。
不过,我认为有更好的方法来解决这个问题。
您已经有了一个服务器。为什么不在另一个“控制”端口(可能只是在本地主机上)而不是在 stdin/stdout/tty 上提供控制台 API?即使服务器作为守护进程运行,这也能正常工作。这意味着您可以使用您最喜欢的花式 Telnet 或类似客户端作为控制台,而不必从头开始编写一些东西。
