Pexpect echoes twice for each read

S

Sriram Rajan

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] +" [email protected]:" +
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 [email protected]:/tmp/
scp replace_line_break.sh [email protected]:/tmp/
[email protected]'s password:

replace_line_break.sh 100% 296 0.3KB/s 00:00
$ $
 
R

RDarrelBonner

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] +" [email protected]:" +
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 [email protected]:/tmp/
scp replace_line_break.sh [email protected]:/tmp/
[email protected]'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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top