Python Pexpect 发送控制键字符

2024-05-16 15:59:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正与pythons pexpect模块一起工作以自动化任务,我需要帮助找出要与sendcontrol一起使用的关键字符。如何发送控制键进入?我们怎样才能找到关键人物呢?

这是我正在编写的代码。

#!/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

Tags: 模块idlineftp字符exact关键expect
1条回答
网友
1楼 · 发布于 2024-05-16 15:59:40

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或decimal 13)。

如果这些都不起作用,那么请确切地解释到底发生了什么,以及这与你想要或期望发生的有什么不同。

相关问题 更多 >