os.execl()

Grant Edwards grante at visi.com
Mon Aug 27 16:30:33 CEST 2001


In article <200108271401.f7RE1P67003979 at smtp6.andrew.cmu.edu>, Brian E Gallew wrote:

>> 	I have a question about the ececl function from the os module. I was
>> trying to write a script to untar a bunch of tarballs in a directory. The
>> script looked like this
>> 
>> #!/usr/bin/env python
>> 
>> import os
>> 
>> os.system("ls *.gz > data_file")
>> 
>> tar_file = open("data_file"), "r")
>> 
>> tar_array = tar_file.readlines()
>> 
>> for tarball in tar_array:
>> 	os.execl("tar", "xzvf", tarball)

The call to exec replaces the current program with the "tar"
program.  It will never return.

>> 
>> os.system("rm data_file")
> 
> That really won't do what you want it to do.  You probably want to do
> something like this:
> 
> #! /usr/bin/env python
> import os,glob
> 
> cmd = [ '/usr/bin/tar',
> 	'-x',
> 	'-z',
> 	'-f',
>       ]
> 
> tar_file_list = glob.glob('*.tar.gz')
> 
> for tar_file in tar_file_list:
>     if os.fork():
>        os.wait()
>     else:
>        os.exec(cmd[0], cmd + [tar_file,])

The os.spawnv() function is simpler to use:

  for tar_file in tar_file_list:
      os.spawnv(os.P_WAIT,"/bin/tar",("xzvf",tar_file))

I haven't tested this, so I'm sure there's a typo somewhere...

-- 
Grant Edwards                   grante             Yow!  Used staples are good
                                  at               with SOY SAUCE!
                               visi.com            



More information about the Python-list mailing list