Pexpect echoes twice for each read

RDarrelBonner at gmail.com RDarrelBonner at gmail.com
Sat Sep 20 01:51:51 CEST 2008


On Sep 9, 4:01 pm, "Sriram Rajan" <rajan.sri... at gmail.com> wrote:
> For some reason, Using pexpect causes my output to echo twice when I
> connect from my MAC Darwin (10.4) to Linux (CentOS release 5 ):
>
> The program:
> ---------------------
> #!/usr/bin/python
> # Automatic scp to remote host
> # Input 1 : filename
> # Input 2 : destination folder
> # Input 3 : hostname
>
> import pexpect
> import sys,re
>
> ssh_cmd = "ssh " + sys.argv[3]
> ssh_handle = pexpect.spawn (ssh_cmd)
> ssh_handle.logfile = sys.stdout
> PROMPT = "\$\ $"
>
> try:
>   ssh_handle.expect(PROMPT)
>
>   ssh_handle.sendline ("scp "+ sys.argv[1] +" r... at 192.168.1.254:" +
> sys.argv[2] )
>
>   ssh_handle.expect("password:")
>
>   ssh_handle.sendline(" ")
>
>   ssh_handle.expect(PROMPT)
>
> except pexpect.TIMEOUT:
>     ssh_handle.logfile.write("\n Pexpect timeout !!\n")
>     sys.exit(1)
> except KeyboardInterrupt:
>     ssh_handle.logfile.write("\n User interrupt!\n")
>     sys.exit(2)
> ssh_handle.close()
>
> Output:
> -----------
> $ python pexpect_test.py replace_line_break.sh /tmp/ 10.5.254.18
> Last login: Tue Sep  9 15:45:05 2008 from sriram-macbook.dhcp.2wire.com
> $ scp replace_line_break.sh r... at 192.168.1.254:/tmp/
> scp replace_line_break.sh r... at 192.168.1.254:/tmp/
> r... at 192.168.1.254's password:
>
> replace_line_break.sh                         100%  296     0.3KB/s   00:00
> $ $

Hi,

I had this issue as well. To correct it I upgraded to pexpect 2.3 from
2.1 and changed the following:

OLD: ssh_handle.logfile = sys.stdout
NEW: ssh_handle.logfile_read = sys.stdout

This eliminated the double display of characters as only the
characters being sent back from the device are displayed.

Let me know if this works for you.

- Darrel



More information about the Python-list mailing list