[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
>
>