[Tutor] Confirmation if command worked

Johan Geldenhuys johan at accesstel.com.au
Thu Aug 25 08:50:27 CEST 2011


Hi Christian,

 

Thanks for that. I'll give it a shot and see if I can catch the error.

 

Lekker dag

 

 

Johan

 

From: Christian Witts [mailto:cwitts at compuscan.co.za] 
Sent: Thursday, 25 August 2011 4:25 PM
To: Johan Geldenhuys
Cc: tutor at python.org
Subject: Re: [Tutor] Confirmation if command worked

 

On 2011/08/25 07:51 AM, Johan Geldenhuys wrote: 

Hi all,
 
 
I have the following code that uses pexpect to execute a system command. My
problem is, I don't know how to identify if the command was successfully
executed.
The code works as it is to execute the SCP command, but it executes
regardless if the SCP session can actually connect to something.
 
Thanks
 
def doScp(files):
    
    
    logger.log("Files to get: " + `files`)
    fNames = ' '.join(files)
    
    cmd = 'scp %s %s@%s:%s%s' % (fNames,
                                SCP_USERNAME,
                                SCP_HOST,
                                SCP_IMG_FILE_DIR,
                                SCP_IMG_FILE_PATH)
                                
    logger.log("Sending: " + cmd)
        
    child = pexpect.spawn(cmd)
        
    i = child.expect(['assword:', 'yes/no'], timeout=30)
    if i == 0:
        child.sendline(SCP_PASSWD)
    
    elif i == 1:
        child.sendline("yes")
        child.expect("assword:", timeout=30)
        child.sendline(SCP_PASSWD)
        
    data = child.read()
    
    if data != None:
        success = True
    else:
        success = False
    child.close()
    
    logger.log("Files sent to SCP host")
    
    return success
 
 
 
 
 
_______________________________________________
Tutor maillist  -  Tutor at python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
 
 


Once you call child.close() the exit and signal status will be stored in
.exitstatus and .signalstatus, for a normal exit of the program .exitstatus
will store the return code from SCP as per [1] [2] [3] and .signalstatus
will be None.  If SCP was terminated with a signal then .exitstatus will be
None and .signalstatus will contain the signal value.  Info found in the
docs [4].

So the changes to your code will be:

<snip>
    data = child.read()
    child.close()

    if child.exitstatus and child.exitstatus == 0:
        success = True
    else:
        success = False
<snip>

I'll leave putting in handling of failed error codes and abnormal
termination to you.

[1] http://support.attachmate.com/techdocs/2116.html
[2] http://support.attachmate.com/techdocs/2487.html
[3] http://support.attachmate.com/techdocs/2285.html
[4] http://pexpect.sourceforge.net/pexpect.html

-- 

Christian Witts
Python Developer

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110825/8c12287c/attachment-0001.html>


More information about the Tutor mailing list