2012-06-26 34 views
5

Tôi đọc trong sách rằng /dev/random giống như tệp vô hạn, nhưng khi tôi thiết lập các mã sau để xem nội dung trông như thế nào, nó sẽ không in được gì.Cách đọc/dev/ngẫu nhiên trong python

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

BTW, khi tôi thử điều này với /dev/urandom, nó hoạt động.

+2

Tại sao các bạn đọc * đường * từ một thiết bị nhị phân ngẫu nhiên? –

+0

@ IgnacioVazquez-Abrams Vậy nội dung nhị phân của nó bên trong? Sau đó, 'readline' phải chờ đợi một sự trở về không tồn tại. Nhưng tại sao nó lại hoạt động cho/dev/urandom? – satoru

Trả lời

8

Xuất ra các byte ngẫu nhiên chứ không phải các dòng ngẫu nhiên. Bạn thấy không có gì cho đến khi bạn nhận được một dòng mới, mà sẽ chỉ xảy ra mỗi 256 byte trên trung bình. Lý do /dev/urandom dường như hoạt động đơn giản là nó hoạt động nhanh hơn. Chờ lâu hơn, đọc ít hơn hoặc sử dụng /dev/urandom.

+1

Tôi tin rằng bạn đã viết sai chính tả đầu tiên/dev/ngẫu nhiên với/dev/urandom ... – golja

+0

golja, không? '/ dev/urandom' là một thiết bị riêng biệt, chỉ tạo ra dữ liệu giả ngẫu nhiên, không giống'/dev/random' cố gắng thực hiện một công việc thích hợp (nhưng đòi hỏi nhiều thời gian hơn để thực hiện). – tripleee

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

FWIW, cách ưa thích của việc tiếp cận dòng này (hoặc một cái gì đó giống như nó) một cách semi-portable là os.urandom()

+2

+1 cho 'os.urandom' –

+2

' os.urandom' trả về '/ dev/urandom', một luồng khác (ít an toàn hơn nhưng nhanh hơn) trên các hệ thống Linux. – soulseekah

Các vấn đề liên quan