【问题标题】:Python Console with Logging带有日志记录的 Python 控制台
【发布时间】:2013-09-25 01:24:23
【问题描述】:

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

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

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

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

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

提前致谢,

弗莱迪。

【问题讨论】:

  • 我相信您想使用subprocess.Popen 运行后台进程(类似于在linux 中使用& 调用可执行文件)。我没有更明确的解决方案,但认为该评论值得包含,因此您可能会更轻松地搜索答案。
  • curses 会以何种方式“使事情复杂化”?如果没有它或另一个类似复杂的库,您必须手动处理终端控制序列等。这听起来容易吗?
  • 我不确定子进程在这种情况下如何相关或有用...我不想打开单独的程序。
  • 我只是不想使用诅咒,因为我确信一定有更简单的方法。
  • 您希望更简单的方式看起来像什么?如果你想让线条“粘”起来,你必须在特定的屏幕位置画一条线,放置输入光标,滚动屏幕的其余部分而不触摸那条线,等等。用@987654324 做这些事情的代码@ 并不是特别复杂。

标签: python input printing console sticky


【解决方案1】:

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

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

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

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


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

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

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2011-10-11
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多