2012-06-26 153 views
5

我在一本书中读到/dev/random就像是一个无限的文件,但是当我设置下面的代码来查看内容是什么样子的时候,它什么都不打印。如何在python中读取/ dev/random

with open("/dev/random") as f: 
    for i in xrange(10): 
     print f.readline() 

顺便说一句,当我试着用/dev/urandom这个,它的工作。

+2

你为什么要读*线*从随机二进制设备? –

+0

@ IgnacioVazquez-Abrams所以它里面的二进制内容?然后'readline'必须等待一个不存在的回车。但是为什么它对/ dev/urandom起作用呢? – satoru

回答

8

据输出随机字节,而不是随机的线条。除非你得到一个换行符,否则你什么也看不到,换行符只会平均每256个字节发生一次。 /dev/urandom似乎工作的原因只是它运行速度更快。等待时间更长,读数更少或使用/dev/urandom

+1

我相信你用/ dev/urandom拼错了第一个/ dev/random ... – golja

+0

golja,不是吗? '/ dev/urandom'是一个独立的设备,它只会产生伪随机数据,不像'/ dev/random'那样试图做一个适当的工作(但需要更多的时间来完成)。 – tripleee

5
with open("/dev/random", 'rb') as f: 
    print repr(f.read(10)) 
14

FWIW,在一个半便携式的方式访问这个流(或类似的东西)的首选方式是os.urandom()

+2

对于'os.urandom'的+1 +1 –

+2

'os.urandom'在Linux系统上返回'/ dev/urandom',这是一个不同的流(不太安全,但速度更快)。 – soulseekah