Pipelining tar create and tar extract the "Python" way...
Ray Van Dolson
rvandolson at esri.com
Fri Sep 25 17:48:38 CEST 2009
On Wed, Sep 23, 2009 at 04:22:36PM -0700, Ray Van Dolson wrote:
> On Wed, Sep 23, 2009 at 03:52:11PM -0700, Ray Van Dolson wrote:
> > Hi all;
> > In the land'o'shell, I can do something like the following:
> > tar cvf - SrcDir | (cd /dest ; tar xvf -)
> Bad form replying to my own post... while I'd still like to know if
> this is possible to do with the tarfile class, it seems like using
> subprocess.Popen() and calling tar from there with stdout set to PIPE
> is probably the way to go.
> I think this will result in the fastest way to copy files around.
> Sounds like shutil.copytree() may not be all that robust (and probably
> not very fast) in my version of Python (2.4.3 on RHEL5).
> Still open to creative suggestions... :)
Never found a way to do this with the tarfile class directly, but used
Popen() to call tar:
# Time for some fancy shmancy calls to tar. First create the process that
# will generate our tar file and set it to output to a PIPE.
p1 = Popen(["tar", "cf", "-", "."], cwd=u['homedir'], stdout=PIPE)
# Next, set up our consumer tar process. This one should extract its data
# in the destination directory.
p2 = Popen(["tar", "xf", "-"], cwd=new_homedir, stdin=p1.stdout)
err = p2.communicate()
Nothing groundbreaking as this is from the examples in the
documentation, but just in case anyone else stumbles across this..
More information about the Python-list