python 如何查看pexpect中的输出?

vbopmzt1  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(215)

我写了这个程序:

[mik@mikypc ~]$ cat ftp.py 
 #!/usr/bin/env python

 # This connects to the rediris ftp site
 # 
 import pexpect
 child = pexpect.spawn('ftp ftp.rediris.es')

 child.expect('Name .*: ')
 child.sendline('anonymous')
 child.expect('ftp> ')
 child.sendline('noah@example.com')
 child.expect('ftp> ')
 child.sendline('lcd /tmp')
 child.expect('ftp> ')
 child.sendline('pwd')
 child.expect('ftp> ')
 child.sendline('bye')

[mik@mikypc ~]$ ./ftp.py 
[mik@mikypc ~]$ 
[mik@mikypc ~]$ 
[mik@mikypc ~]$

但是我看不到输出,我怎么能看到呢?我执行的时候什么都看不到,我怎么能看到输出呢?

xjreopfe

xjreopfe1#

根据pexpect doc
logfile_readlogfile_send成员可用于分别记录来自子代的输入和发送给子代的输出。有时,您不希望看到写入子代的所有内容,而只希望记录子代发回的内容。例如:

child = pexpect.spawn('some_command')
child.logfile_read = sys.stdout

如果您使用的是Python 3,则需要在上面的代码中传递一个编码来生成。
要单独记录发送给子进程的输出,请使用logfile_send

child.logfile_send = fout

参见以下示例:

[STEP 105] # cat foo.py
import pexpect, sys

re_PS1 = 'bash-[.0-9]+[$#] $'

proc = pexpect.spawn('bash --norc')
if len(sys.argv) != 1:
    if sys.version_info[0] < 3:
        proc.logfile_read = sys.stdout
    else:
        proc.logfile_read = sys.stdout.buffer

proc.expect(re_PS1)

proc.sendline("echo hello world")
proc.expect(re_PS1)

proc.sendline('exit')
proc.expect(pexpect.EOF)
proc.close()

[STEP 106] # python foo.py
[STEP 107] # python foo.py foo
bash-4.4# echo hello world
hello world
bash-4.4# exit
exit
[STEP 108] #
cx6n0qe3

cx6n0qe32#

从pexpect文档中:
每次调用expect()后,beforeafter属性将设置为子应用程序打印的文本。before属性将包含预期字符串模式之前的所有文本。after字符串将包含与预期模式匹配的文本。
因此,在战略位置使用print(child.before)应该可以满足您的需要。

blpfk2vs

blpfk2vs3#

您还可以将pexpect的输出记录到日志文件中:

child.logfile = open("/tmp/mylog", "w")

然后发送行的每个响应都将打印到日志中

相关问题