#!/usr/local/bin/python import sys import os import string def usage(): sys.stderr.write('Usage: %s -c chunkhandlerprog -n nameprefix [-t tmpdir] [-b blocksize]\n' % sys.argv[0]) sys.stderr.write('-c specifies the chunk handling program to handle each chunk, and is required\n') sys.stderr.write('-n specifies the nameprefix to use on all files created, and is required\n') sys.stderr.write('-t specifies the temporary directory to write files to, and is optional. Defaults to $TMPDIR or /tmp\n') sys.stderr.write('-b specifies the length of files to create, and is optional. Defaults to 1 gigabyte\n') sys.stderr.write('-d specifies the number of digits to use in filenames. Defaults to 5\n') sys.exit(1) # set some defaults prog=nameprefix="" if os.environ.has_key('TMPDIR'): tmpdir=os.environ['TMPDIR'] else: tmpdir='/tmp' blocksize=2**(3*10) digits=5 verbose=0 # parse options while sys.argv[1:]: if sys.argv[1] == '-c' and sys.argv[2:]: prog=sys.argv[2] del sys.argv[1] del sys.argv[1] elif sys.argv[1] == '-n' and sys.argv[2:]: nameprefix=sys.argv[2] del sys.argv[1] del sys.argv[1] elif sys.argv[1] == '-t' and sys.argv[2:]: tmpdir=sys.argv[2] del sys.argv[1] del sys.argv[1] elif sys.argv[1] == '-b' and sys.argv[2:]: blocksize=string.atoi(sys.argv[2]) del sys.argv[1] del sys.argv[1] elif sys.argv[1] == '-b' and sys.argv[2:]: digits=string.atoi(sys.argv[2]) del sys.argv[1] del sys.argv[1] elif sys.argv[1] == '-v': verbose = 1 del sys.argv[1] else: usage() # verify options if nameprefix == '' or prog == '': sys.stderr.write('-n and -c are both required options\n') usage() # pad a number with leading zeros, converting it from an integer to a # string def pad(n): s = str(n) while len(s) < digits: s = '0' + s return s blockno=0 while 1: if verbose: sys.stderr.write('Reading block %d\n' % blockno) block = sys.stdin.read(blocksize) if not block: break if verbose: sys.stderr.write('Read block of length %d\n' % len(block)) filename = "%s/%s.%s" % (tmpdir, nameprefix, pad(blockno)) if verbose: sys.stderr.write('Writing file %s\n' % filename) file = open(filename, "w") file.write(block) file.close() command = "%s %s" % (prog, filename) if verbose: sys.stderr.write('Performing command %s\n' % command) # retval is likely the shell return value * 256, but 0 is still 0, and # nonzero is still nonzero #os.system('echo '+command+' | od -cx') retval = os.system(command) if retval == 0: if verbose: sys.stderr.write('Command executed successfully\n') else: sys.stderr.write('Error executing %s\n' % command) sys.stderr.write('Return value from command was %s\n' % str(retval)) sys.stderr.write('Abnormal termination\n') sys.exit(1) if verbose: sys.stderr.write('Deleting %s\n' % filename) os.unlink(filename) blockno += 1 if verbose: sys.stderr.write('Normal termination\n') sys.exit(0)