【问题标题】:Sending Control-R over serial not recognized with Python/Pexpect通过 Python/Pexpect 无法识别的串行发送 Control-R
【发布时间】:2013-11-04 22:50:25
【问题描述】:

我正在编写一些 Python 代码来检测选项 ROM 初始化的开始,并发送适当的控制字符以进入选项 ROM 设置实用程序。这在大多数情况下都有效(control-C、control-Y、control-S...),但是当 control-R 是所需的键时,无法识别字符。

我怀疑这是因为 control-R 是终端正在解释而不是传递的某种特殊控制字符,但找不到对它的任何引用。我试过用 ESC 和其他一些控制字符作为前缀,但似乎无法识别它。代码很简单:

    CONTROL_R = '\x12'
    print("Sending control-R to enter setup")
    spawn_id.send(CONTROL_R)         # send character to console

感谢任何指针或建议。

【问题讨论】:

  • 您希望拦截的这个“终端”是什么?您是在生成一个 shell 来运行该实用程序而不是直接生成它吗?
  • 你能展示一下你是如何创建spawn_id的吗?
  • 我正在使用 pexpect.spawn('ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PubkeyAuthentication=no username@pw)
  • 如果您在真实终端中运行该命令,Ctrl-R 是否有效?可以在 SSH 服务器上用this script 试试吗?
  • Ctrl-R 在真正的终端上运行没有问题。运行脚本按 Ctrl-R 的预期返回 18。

标签: python serial-port escaping special-characters pexpect


【解决方案1】:

spawn_id.sendcontrol('r')

来自文档:http://pexpect.sourceforge.net/pexpect.html

【讨论】:

  • 我觉得sendcontrol('r')和send('\x12')是等价的,不过还是值得一试,以防pexpect出现bug。
【解决方案2】:

我从一位同事那里得知,Control-R 在 bash shell 中启动了反向搜索。这会导致 shell 在选项 ROM 代码处理之前吃掉该字符。感谢那些提出建议的人。

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多