python pexpect sendcontrol关键字符

时间:2012-07-02 14:20:42

标签: python key character pexpect

我正在使用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

1 个答案:

答案 0 :(得分:10)

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

    id.sendline('')

如果您需要发送实际控制字符,则可以send()包含适当字符值的字符串。例如,要发送一个control-C,你会:

    id.send('\003')

或:

    id.send(chr(3))

回应评论#2:

抱歉,我输入了模块名称 - 现已修复。更重要的是,我正在查看noah.org上的旧文档,而不是latest documentation at SourceForge。较新的文档确实显示了sendcontrol()方法。它接受一个参数,它是一个字母(例如,sendcontrol('c')发送一个控件-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)。

如果那些不起作用,那么请准确说明发生了什么,以及它与您想要或预期会发生什么不同。