2012-06-26 3 views
5

में पढ़ने/dev/यादृच्छिक पढ़ने के लिए कैसे /dev/random एक पुस्तक में पढ़ा गया है जो एक अनंत फ़ाइल की तरह है, लेकिन जब मैं निम्नलिखित कोड सेट करता हूं यह देखने के लिए कि सामग्री कैसा दिखता है, तो यह कुछ भी प्रिंट नहीं करता है।पाइथन

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

बीटीडब्ल्यू, जब मैंने /dev/urandom के साथ यह कोशिश की, तो यह काम किया। की तरह/dev/यादृच्छिक आप के लिए ब्लॉक कर रहा है

+2

एक यादृच्छिक द्विआधारी डिवाइस से आप क्यों पढ़ रहे हैं * लाइनों * है? –

+0

@ IgnacioVazquez-Abrams तो यह अंदर बाइनरी सामग्री है? फिर 'रीडलाइन' एक गैर मौजूद कैरिज रिटर्न के लिए इंतजार कर रहा है। लेकिन फिर यह/dev/urandom के लिए क्यों काम करता है? – satoru

उत्तर

8

यह यादृच्छिक बाइट्स, नहीं यादृच्छिक लाइनों outputting है। जब तक आपको कोई नई लाइन न मिल जाए, तब तक आप कुछ भी नहीं देखते हैं, जो औसत पर केवल 256 बाइट ही होगा। कारण /dev/urandom काम पर प्रतीत होता है कि यह तेज़ी से चल रहा है। लंबे समय तक प्रतीक्षा करें, कम पढ़ें, या /dev/urandom का उपयोग करें।

+1

मेरा मानना ​​है कि आपने पहले/dev/random/dev/urandom के साथ यादृच्छिक वर्तनी की है ... – golja

+0

गोल्जा, नहीं? '/ dev/urandom' एक अलग डिवाइस है, जो केवल छद्म-यादृच्छिक डेटा उत्पन्न करता है, '/ dev/random' के विपरीत जो उचित कार्य करने का प्रयास करता है (लेकिन ऐसा करने के लिए बहुत अधिक समय की आवश्यकता होती है)। लिनक्स सिस्टम पर 'os.urandom' – tripleee

14

Fwiw, एक अर्द्ध पोर्टेबल तरीके से इस धारा (या इसे की तरह कुछ) तक पहुँचने का पसंदीदा तरीका os.urandom()

+2

+1। –

+2

' os.urandom' रिटर्न '/ dev/urandom', एक अलग स्ट्रीम (कम सुरक्षित, अभी तक तेज) के लिए – soulseekah