[Tutor] errno module - was File copying - best way?

fleet@teachout.org fleet@teachout.org
Sun, 5 Aug 2001 13:06:09 -0400 (EDT)


I will study this and look at the rest of the exceptions listed for 'os;'
but what about the 'errno' module?

				- fleet -

On Sun, 5 Aug 2001, Michael P. Reilly wrote:

> On Sun, Aug 05, 2001 at 08:47:00AM -0400, fleet@teachout.org wrote:
> > - but I have no clue how to use it.  Would this have allowed me to test:
> >
> > os.popen("ls *.jpg")
> >
> > if it found no jpg files?
>
> Much like a C program, you need to get the exit status value and
> decode it.  The close() method returns the exit status.
>
> def list_jpegs():
>   class StoppedProgram(Exception):
>     pass
>   class ProgramTerminated(Exception):
>     pass
>   import os
>   f = os.popen("ls -1 *.jpg", "r")
>   files = f.readlines()
>
>   stat = f.close()  # this is what is returned by wait(2)
>   # if rc is false (0 or None) then everything is fine
>   if not rc:
>     rc = 0
>
>   # program terminated normally, but possibly with error
>   elif os.WIFEXITED(stat):
>     rc = os.WEXITSTATUS(stat)
>
>   # was cntl-Z type or something similar?
>   elif os.WIFSTOPPED(stat):
>     raise StoppedProgram(os.WSTOPSIG(stat))
>
>   # the program was abnormally terminated, cntl-C or logout or kill
>   elif os.WIFSIGNALLED(stat):
>     raise ProgramTerminated(os.WTERMSIG(stat))
>
>   return rc, files  # return exit status and list
>
> You could also raise an exception if rc is true.  A design flaw in how
> Python handles these things is that the os.W* functions cannot take
> the None value returned by most of the functions (like popen().close()
> and os.wait()) that are to pass the values to them.  So you need to
> check the value before passing them to os.WIFEXITED, os.WSTOPSIG, etc..
> For the most part, if the result is false, then you know things are fine.
>
>   -Arcege
>
>