2

我正在重写一个服务器程序,我想在其中添加一个简单的控制台输入。

目前,它只提供数据并为它所做的每件事打印一两行,作为任何观看/调试的人的描述性措施。

我想要的是有一个始终位于底部的“粘性”输入栏,在其上方显示我的调试打印,以便我可以在程序打印时随时输入命令。这看起来有点像:

...
[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

理想情况下,这将在没有诅咒的情况下完成,因为这会使事情复杂化。我觉得我一定错过了一个简单的解决方案。

提前致谢,

弗雷迪。

4

1 回答 1

1

如果您正在寻找比 稍高一些的库curses,有一些,例如urwid(当然它们不是 Python 附带的,并且必须安装)。

如果您真的想避免使用窗口库,我想您可以在 下运行服务器screen,配置输入栏和窗口的其余部分,并为服务器提供两个虚拟 TTY 而不是正常输入……但这会做更多的工作,而不是更少。

如果您想降低级别,您始终可以使用termios、搜索termcap和手动编写控制序列来手动处理除最后一行之外的所有内容、移动输入光标等。但这将是更多的工作。

当然,总是有超级骇人听闻的可能性:对于每个输出,在每个输入之后,通过发送数百个空白行、重写输出和写入输入行来“重绘”整个屏幕。这看起来很糟糕,并且不适用于各种边缘情况,但它确实避免了任何类型的窗口。


但是,我认为有更好的方法来解决这个问题。

你已经有了一个服务器。为什么不在另一个“控制”端口(可能只是在本地主机上)而不是在 stdin/stdout/tty 上提供控制台 API?即使服务器例如作为守护进程运行,这也将起作用。这意味着您可以使用您最喜欢的 Telnet 或类似客户端作为控制台,而不必从头开始编写一些东西。

于 2013-09-19T20:27:35.827 回答