我正在尝试将python数字生成器与dieharder结合使用,我发现可以在Linux中使用管道来完成
python3 generator.py | dieharder -a -g 200
-g 200
表示我将使用stdin_input_raw
这是顽固手册的规范:
Raw binary input reads 32 bit increments of the specified data
stream. stdin_input_raw accepts a pipe from a raw binary stream.
现在我使用随机生成器创建了一些python代码:
while True:
sys.stdout.write("{0:b}".format(random.randint(0, 256)))
但是我认为它不能按预期工作,因为上面的第一次测试的终端命令的结果是:
test_name |ntup| tsamples |psamples| p-value |Assessment
#====================================================================#
diehard_birthdays| 0| 100| 100|0.00000000| FAILED
在执行命令时
cat /dev/urandom | dieharder -a -g 200
是:
test_name |ntup| tsamples |psamples| p-value |Assessment
#====================================================================#
diehard_birthdays| 0| 100| 100|0.92477826| PASSED
我怀疑我生成raw input stream
的代码不正确,如何在python中创建此流?
解决方案:
while True:
sys.stdout.buffer.write(struct.pack('>I', random.randint(0, 2**32)))