【问题标题】:How to capture escape sequences sent by terminal?如何捕获终端发送的转义序列?
【发布时间】:2017-10-06 22:10:27
【问题描述】:

如何捕获终端应用程序(例如 Konsole)发送的转义序列?例如,如果您点击 PgDown,则会向虚拟控制台发送什么?

我想将发送到虚拟控制台的字节流(比如当我点击“Ctrl+C”时它产生的转义序列)记录到一个文件中,然后我可以使用 hexdump 读取。

【问题讨论】:

  • 不,这个问题提供了有关脚本写入内容等信息以记录其执行情况。在这里,我想获取发送到虚拟控制台的字节流。
  • 你只是正常阅读你的标准输入。转义序列是流的一部分。 BTW Ctrl-C 不是转义序列,它是单个字符。

标签: linux ansi-escape


【解决方案1】:

我做了一个小 Python 脚本来解决这个问题:

#!/bin/env python

import curses
from pprint import pprint

buf = ''

def main(stdscr):
  global buf
  curses.noecho()
  curses.raw()
  curses.cbreak()
  stdscr.keypad(False)

  stop = stdscr.getkey()
  c = stdscr.getkey()
  buf = ''
  while c != stop:
    buf += c
    c = stdscr.getkey()

def run():
  curses.wrapper(main)
  pprint(buf)
  tmp = buf.encode('latin1')
  pprint([hex(x) for x in tmp])
  pprint([bin(x) for x in tmp])

run()

...它清除屏幕,然后键入一个键(例如 a),然后键入任何内容,然后键入与第一个键相同的键以停止。然后,它将显示接收到的所有字节(例如:a [开始录制] Alt+b [停止录制] a 使用我的终端生成字节:['0x1b', '0x62']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 2013-10-04
    • 2015-05-09
    • 1970-01-01
    • 2011-05-27
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多