Tiago Saboga wrote: > But I strip the code, and post a new one. The solution I found is in the > seek() method of the file object. And the problem I had is that not all the > file-like objects have a functional seek() method. It's not the case for the > object referenced by the stdout attribute of the subprocess.Popen class. So I > have to copy it in a (seekable) temporary file. As I have already bothered > you with my question, let's try to make it still useful: is it the "right" > (or pythonic) way to do this? > > Thanks, > > Tiago. > > ============solution================ > import subprocess, shutil, tempfile > > FILESIZE = 200000 > NUMBER = 10 > DIR = '/tmp/pytest' > FILENAME = 'treco.x' > > cmd = ['dd', 'if=/dev/zero', 'count=1', 'bs=%s' % FILESIZE] > tempbasefile = tempfile.TemporaryFile() > > basefile = subprocess.Popen( > cmd, > stdout=subprocess.PIPE, > bufsize=FILESIZE > ).stdout > > shutil.copyfileobj(basefile, tempbasefile) > > for i in range(NUMBER): > tempbasefile.seek(0) > print "File number %s" % i > newfile = open('%s/%s%s' % (DIR, FILENAME, i), 'w') > shutil.copyfileobj(tempbasefile, newfile) > newfile.close()
This is similar to your first successful solution in a way - you are reading the contents of the input file and storing them in a temporary location. In the first version you stored the contents in memory; in this one you store the contents in a temp file. Unless the data is too large to fit in memory I think the first program is preferable, it is simpler and will likely be faster. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor