【发布时间】:2018-05-23 13:47:24
【问题描述】:
所以我有一个脚本可以向网站发送请求,然后显示响应数据包的状态代码。比如:
METHOD | COUNT
200 | 2 results
404 | 987 results
500 | 1 results
...
这需要一段时间才能完成,所以我让它在一个机器上运行,我使用 Linux 工具 Screen 将其 ssh 进去。这个问题是 screen 不适用于 Python 的 curses 模块,因为要从屏幕终端分离(所以我可以注销并让它继续运行)它需要我按下捕获的 ctrl+a+d 然后被curses 忽略。
我知道您可以像这样覆盖在 Python 中输出到控制台的单行:
out = "200 | {} results\r".format(num)
sys.stdout.write(out)
sys.stdout.flush()
但是有没有办法将它扩展到多行,所以我可以做更多类似的事情:
# Updates approx once a second
out = ""
for code, num in STATUS_CODES:
out += "{} | {}\r\n".format(code, num)
sys.stdout.write(out)
sys.stdout.flush()
【问题讨论】:
-
你应该可以正常使用
curses,而不用拦截 CTRL+A、D 序列... -
curses和脚本本身运行良好。问题是,在我从sys.stdout.write()切换到curses后,按ctrl+a+d不再执行任何操作,所以如果不停止脚本运行,我根本无法退出。 -
你是如何初始化
curses的? (需要说明的是,如果我只是在screen会话中执行import curses; w = curses.initscr(),我仍然可以 Ctrl+A、D 就好了。) -
使用 main:
curses.wrapper(main)周围的包装器,然后使用传递给main的stdscr对象作为参数。我想我可以改用stdscr = curses.initscr()试试看是否有帮助 -
对。
wrapper做的不仅仅是initscr,所以他们可能是这里的问题。 github.com/python/cpython/blob/…
标签: python terminal python-curses