[Tutor] Confirmation if command worked

Christian Witts cwitts at compuscan.co.za
Thu Aug 25 08:25:16 CEST 2011


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/ad901226/attachment.html>


More information about the Tutor mailing list