class RecordReceiver: def __init__(self, handle): self.handle = handle def __call__(self, id, rec): self.handle.write(rec) # Functor that deals with bad records - prints an error message to HANDLE class BadRecordReceiver: def __init__(self, handle): self.handle = handle self.badIDs = [] def __call__(self, badID): self.badIDs.append(badID) self.handle.write("Bad ID: %s\n" % badID) # Form pattern for accession strings accessionPat = prefix + "%%0%dd" % digits batchSize = 500 for curr in xrange(start, end + 1, batchSize): # Generate accession strings for this batch ids = [accessionPat % num for num in range(curr, min(curr + batchSize, end + 1))] GenBank.download_many( ids, RecordReceiver(sys.stdout), database="nucleotide", broken_fn=BadRecordReceiver(sys.stderr), faildelay=5.0 )