【问题标题】:python pexpect sendcontrol key characterspython pexpect sendcontrol 关键字符
【发布时间】:2012-07-02 14:20:42
【问题描述】:

我正在使用 pythons pexpect 模块来自动执行任务,我需要帮助来确定要与 sendcontrol 一起使用的关键字符。怎么能发送控制键 ENTER ?以及如何找到关键字符以供将来参考?

这是我正在处理的代码。

#!/usr/bin/env python

import pexpect

id = pexpect.spawn ('ftp 192.168.3.140')

id.expect_exact('Name')

id.sendline ('anonymous')

id.expect_exact ('Password')
*# Not sure how to send the enter control key
id.sendcontrol ('???')* 

id.expect_exact ('ftp')

id.sendline ('dir')

id.expect_exact ('ftp')

lines = id.before.split ('\n')

for line in lines :
        print line

【问题讨论】:

    标签: python key character pexpect


    【解决方案1】:

    pexpect 没有 sendcontrol() 方法。在您的示例中,您似乎试图发送一个空行。为此,请使用:

        id.sendline('')
    

    如果您需要发送真正的控制字符,那么您可以send() 一个包含适当字符值的字符串。例如,要发送一个 control-C,您可以:

        id.send('\003')
    

    或:

        id.send(chr(3))
    

    对评论 #2 的回应:

    抱歉,我打错了模块名称 - 现在已修复。更重要的是,我查看的是 noah.org 上的旧文档,而不是 latest documentation at SourceForge。较新的文档确实显示了 sendcontrol() 方法。它接受的参数可以是字母(例如,sendcontrol('c') 发送一个 control-C),也可以是表示不对应字母的控制字符的各种标点符号之一。但实际上sendcontrol() 只是send() 方法的一个方便包装,这是sendcontrol() 在计算出您要发送的实际值之后调用的方法。你可以在line 973 of this file自己阅读源代码。

    我不明白为什么id.sendline('') 不起作用,尤其是考虑到它显然可以将用户名发送到生成的ftp 程序。如果您想尝试使用sendcontrol(),那么可以:

        id.sendcontrol('j')
    

    发送换行符(control-j 或十进制 10)或:

        id.sendcontrol('m')
    

    发送回车(control-m,或十进制 13)。

    如果这些都不起作用,请准确解释发生了什么,以及这与您想要或期望发生的情况有何不同。

    【讨论】:

    • 您好 ottomeister ,感谢您的帮助,我真的很感激。实际上我正在使用 pexpect 一个 python 模块,我通读了文档并找到了 sendcontrol。我用 sendline ('') 试过了,但没有帮助。在文档中,它给出了一个示例 sendcontrol ('g'),但没有解释 g 字母的作用以及要查找的密钥代码类型。
    • 你是明星,谢谢 ottomeister,效果很好!奇怪的是它与 id.sendcontrol('m') j 和 d 一起使用。如果我可以问这些字母 j,m 它们到底是什么?再次感谢您的出色帮助。没有比这更好的答案了。
    • 这不适用于我的 RHEL 7.5。我正在尝试不同的组合,但sendcontrol('m') 不起作用,尽管能够在终端中手动输入 CTRL-M 并获得预期的 CR。
    • 对我来说,send('\r\n')sendline('\r\n')\r 和/或\n 在这些方法中的任何组合都有效。但是,sendcontrol('j') 从未工作(在脚本中或手动),sendcontrol('m') 手动工作,但不在脚本中。
    猜你喜欢
    • 2011-05-21
    • 2012-11-22
    • 1970-01-01
    • 2013-08-09
    • 2017-06-23
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多