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

最佳答案

预期没有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')

发送回车票(控制号为m或十进制13)。

如果这些方法不起作用,请准确说明发生了什么,以及与您希望或期望发生的事情有何不同。

关于python - python pexpect sendcontrol关键字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11295550/

10-12 20:58