#!/usr/bin/env python # usage: bytestream bytes_per_second chunks_per_second # writes bytes_per_second bytes each second to stdout, in chunks_per_second # chunks each second from __future__ import division import sys import time import array import itertools try: bytes_per_second, chunks_per_second = (int(arg) for arg in sys.argv[1:]) except: print >> sys.stderr, '''bytestream usage: bytestream bytes_per_second chunks_per_second Writes bytes_per_second bytes to stdout in chunks_per_second chunks per second. Use this as an unbounded stream of bytes. ''' sys.exit(1) prog = sys.argv[0].split('/')[-1] + ':' print >> sys.stderr, prog, 'command-line:' print >> sys.stderr, prog, sys.argv bytes_per_chunk = bytes_per_second // chunks_per_second chunk = array.array('B', (x % 256 for x in xrange(bytes_per_chunk))).tostring() print >> sys.stderr, prog, 'chunksize', len(chunk) assert len(chunk) > 0 time_inc = 1 / chunks_per_second print >> sys.stderr, prog, 'time_inc', time_inc print >> sys.stderr, prog, 'bytes per second', len(chunk) / time_inc tick_tock = itertools.count(1).next start_time = time.time() def escapement(): end_time = start_time + time_inc * tick_tock() sleep_time = end_time - time.time() if sleep_time <= 0: return time.sleep(sleep_time) while True: sys.stdout.write(chunk) escapement()