You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.9 KiB
48 lines
1.9 KiB
#!/usr/bin/env python
|
|
|
|
import os, sys
|
|
|
|
from random import randrange
|
|
|
|
import argparse
|
|
|
|
def main():
|
|
CHUNKSIZE=2**20
|
|
|
|
parser = argparse.ArgumentParser(prog="randfile", description="Create a file of pseudorandom bytes (not cryptographically secure).")
|
|
|
|
parser.add_argument('-b', '--num-bytes', help="how many bytes to write per output file (default 20)", type=int, metavar="BYTES", default=20)
|
|
parser.add_argument('-f', '--output-file-prefix', help="prefix of the name of the output file to create and fill with random bytes (default \"randfile\"", metavar="OUTFILEPRE", default="randfile")
|
|
parser.add_argument('-n', '--num-files', help="how many files to write (default 1)", type=int, metavar="FILES", default=1)
|
|
parser.add_argument('-F', '--force', help='overwrite any file already present', action='store_true')
|
|
parser.add_argument('-p', '--progress', help='write an "x" for every file completed and a "." for every %d bytes' % CHUNKSIZE, action='store_true')
|
|
args = parser.parse_args()
|
|
|
|
for i in xrange(args.num_files):
|
|
bytesleft = args.num_bytes
|
|
outputfname = args.output_file_prefix + "." + str(i)
|
|
|
|
if args.force:
|
|
f = open(outputfname, "wb")
|
|
else:
|
|
flags = os.O_WRONLY|os.O_CREAT|os.O_EXCL | (hasattr(os, 'O_BINARY') and os.O_BINARY)
|
|
fd = os.open(outputfname, flags)
|
|
f = os.fdopen(fd, "wb")
|
|
zs = [0]*CHUNKSIZE
|
|
ts = [256]*CHUNKSIZE
|
|
while bytesleft >= CHUNKSIZE:
|
|
f.write(''.join(map(chr, map(randrange, zs, ts))))
|
|
bytesleft -= CHUNKSIZE
|
|
|
|
if args.progress:
|
|
sys.stdout.write(".") ; sys.stdout.flush()
|
|
|
|
zs = [0]*bytesleft
|
|
ts = [256]*bytesleft
|
|
f.write(''.join(map(chr, map(randrange, zs, ts))))
|
|
|
|
if args.progress:
|
|
sys.stdout.write("x") ; sys.stdout.flush()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|