Pexpect echoes twice for each read
RDarrelBonner at gmail.com
RDarrelBonner at gmail.com
Fri Sep 19 19:51:51 EDT 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