6

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

1 回答 1

12

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

    id.sendline('')

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

    id.send('\003')

或者:

    id.send(chr(3))

对评论 #2 的回应:

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

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

    id.sendcontrol('j')

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

    id.sendcontrol('m')

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

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

于 2012-07-02T19:08:16.127 回答