我写了这个程序:
[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 ~]$
但是我看不到输出。我怎么能看到它?我执行它时没有看到任何东西。我怎么能看到输出?。
答案 0 :(得分:3)
根据pexpect doc:
可以使用
logfile_read
和logfile_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:
proc.logfile_read = sys.stdout
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] #
答案 1 :(得分:2)
来自pexpect docs:
每次调用
expect()
后,before
和after
属性都将设置为子应用程序打印的文本。before
属性将包含所有文本,直到预期的字符串模式。after
字符串将包含与预期模式匹配的文本。
因此,战略位置的print(child.before)
应该满足您的需求。
答案 2 :(得分:0)
您还可以将pexpect的输出记录到日志文件中:
child.logfile = open("/tmp/mylog", "w")
然后sendline的每个响应都将打印到日志