import argparse import datetime import time def _positive(s): try: i = int(s) if i > 0: return i except ValueError: pass raise argparse.ArgumentError('must be positive integer') parser = argparse.ArgumentParser('Copies a file slowly') parser.add_argument('--rate', default=1024, type=int, help='Number of bytes to copy per second') parser.add_argument('src', metavar='SRC', type=argparse.FileType('r'), help='Source file') parser.add_argument('dst', metavar='DST', type=argparse.FileType('w'), help='Destination file') args = parser.parse_args() _READ_SIZE=8192 start_time = time.time() bytes_copied = 0 while True: bytes = args.src.read(_READ_SIZE) if not bytes: break args.dst.write(bytes) bytes_copied += len(bytes) target_time = start_time + float(bytes_copied) / args.rate now = time.time() if target_time > now: time.sleep(target_time - now) args.dst.close() args.src.close()