Python 3.9 random.randbytes
+random.seed
我已经学会了停止与 Bash 做不到的事情作斗争,顺其自然:
randbytes() (
python -c 'import random;import sys;random.seed(int(sys.argv[1]));sys.stdout.buffer.write(random.randbytes(int(sys.argv[2])))' "$@"
)
用法:
randbytes <seed> <nbytes>
例如:
randbytes 0 8 | hd
总是输出 8 个相同的伪随机字节,种子为 0:
00000000 cd 07 2c d8 be 6f 9f 62 |..,..o.b|
00000008
可读的多行版本:生成可种子数据的随机字符串
在我的联想 ThinkPad P51 上,我可以在 0.5 秒内将 1 亿字节转储到 ramfs 中。但是,如果我尝试倾销 10 亿,它会爆炸:
Python int too large to convert to C int
所以要记住这一点。
为了比较:
time sudo dd if=/dev/urandom of=ramfs/test bs=4k count=24414
耗时 2.5 秒,因此速度较慢,这并不奇怪,因为它是一个更随机的源,而 Python 生成器是确定性的,并且似乎是用 C 编写的。
在 Ubuntu 20.10、Linux 内核 5.8.0 上测试。