2012-03-29 13 views
5

मैं पाइथन 2.5.1 के साथ एक चेरीपी 3.2.0 सर्वर चला रहा हूं, जो यूआई से किसी भी निर्देश पर हर त्रुटि को तब तक देता है जब तक यह मारे नहीं जाता है और फिर से शुरू कर दिया: -चेरीपी/देव/यूरैंडम (या समकक्ष) नहीं मिला - त्रुटि

[29/Mar/2012:06:37:57] HTTP Traceback (most recent call last): 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 636, in respond 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 97, in run 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 57, in __call__ 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 757, in init 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 162, in __init__ 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 190, in _regenerate 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 204, in generate_id 
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cpcompat.py", line 264, in random20 
File "/usr/lib/python2.5/os.py", line 733, in urandom 
NotImplementedError: /dev/urandom (or equivalent) not found 

_cpcompat.py है निम्नलिखित कोड जिससे पता चलता है मामले cherrypy में random.random पर एक fallback /dev/urandom को पढ़ने में सक्षम है है कि वहाँ नहीं है, लेकिन उस पर वापस गिरने जा करने के लिए प्रतीत नहीं होता है का टुकड़ा।

try: 
    os.urandom(20) 
    import binascii 
    def random20(): 
     return binascii.hexlify(os.urandom(20)).decode('ascii') 

except (AttributeError, NotImplementedError): 
    import random 
    # os.urandom not available until Python 2.4. Fall back to random.random. 
    def random20(): 
     return sha('%s' % random.random()).hexdigest() 

बाद os.py से कोड का टुकड़ा, संदर्भ में प्रासंगिक है: -

if not _exists("urandom"):

def urandom(n): 
     """urandom(n) -> str 

     Return a string of n random bytes suitable for cryptographic use. 

     """ 
     try: 
      _urandomfd = open("/dev/urandom", O_RDONLY) 
     except (OSError, IOError): 
      raise NotImplementedError("/dev/urandom (or equivalent) not found") 
     bytes = "" 
     while len(bytes) < n: 
      bytes += read(_urandomfd, n - len(bytes)) 
     close(_urandomfd) 
     return bytes 

एक ही समय जब cherrypy /dev/urandom पढ़ने में सक्षम नहीं है पर, निम्नलिखित कोड का टुकड़ा ठीक काम कर रहा है: -

python -c "import os;fd = open('/dev/urandom', 'r');print fd.read(5);fd.close()"

मैं दो प्रश्न हैं: -

  1. क्यों है cherrypy लागू नहीं किया त्रुटि फेंक जब मैं/dev/urandom
  2. से यादृच्छिक बिट्स को पढ़ने के लिए कर रहा हूँ क्यों _cpcompact.py जब os.pyNotImplementedError बढ़ा रहा है भाग को छोड़कर नहीं क्रियान्वित कर रहा है।
+0

करता है ' पायथन-सी "आयात ओएस; प्रिंट os.urandom (5) "' काम? – tMC

+0

दुख की बात है, यह करता है, जबकि चेरीपी कहते हैं/dev/urandom लागू नहीं किया गया है! – haltTm

+0

शायद अनुमति कहीं खराब हो गई है? – sdolan

उत्तर

4

यह कोई जवाब नहीं है, हालांकि, मेरे अनुभव में यह नहीं है IIforplemented त्रुटि गलत है लेकिन जब 'बहुत सारी फ़ाइलें' खुली त्रुटियां दिखाई देती हैं तो दिखाई देती है एक मल्टीप्रोसेसिंग प्रक्रियाओं के बाद बेजोड़ अपवाद फेंकना शुरू होता है, बाल धागे या बाल प्रक्रियाओं में हमेशा के लिए लटकने के लिए छोड़ दिया जाता है।

मैं ढेर आगे डिबगिंग शुरू करें और देखें कि वहाँ एक प्रक्रिया

यहाँ द्वारा फेंका चुप अपवाद दफन कर रहे हैं या हैं मेरी स्टैक ट्रेस का एक उदाहरण है जब मैं इस त्रुटि

Exception in thread Plotter: 
Traceback (most recent call last): 
    File "threading.pyc", line 532, in __bootstrap_inner 
    File "plotters/edge.pyc", line 459, in run 
    AttributeError: 'error' object has no attribute 'error' 

OSError: [Errno 24] Too many open files 
    File "multiprocessing/connection.pyc", line 150, in Client 
    File "multiprocessing/connection.pyc", line 370, in deliver_challenge 
    None 
    File "os.pyc", line 756, in urandom 
NotImplementedError: /dev/urandom (or equivalent) not found 

देखने लगते हैं मेरे विशेषता Error उत्पादित, अंततः .../urandom नहीं मिला imlp त्रुटि

1

यह एक जवाब नहीं है, लेकिन हो सकता है आप os.py में कुछ डिबग कोड डाल सकता है (मैं कल्पना नहीं कर सकते यह किसी भी अन्य कार्यक्रम को प्रभावित करेंगे अपनी अनुकूलित याद import os लेकिन इसके लायक का उपयोग कर)

if not _exists("urandom"): 
    def urandom(n): 
     """urandom(n) -> str 

     Return a string of n random bytes suitable for cryptographic use. 

     """ 
     try: 
      _urandomfd = open("/dev/urandom", O_RDONLY) 
     # debug changes 
     except (OSError, IOError) as Err: 
      import syslog 
      syslog.syslog(repr(Err)) 
     # /debug 
      raise NotImplementedError("/dev/urandom (or equivalent) not found") 
     bytes = "" 
     while len(bytes) < n: 
      bytes += read(_urandomfd, n - len(bytes)) 
     close(_urandomfd) 
     return bytes 

उम्मीद है कि आपको बताएगा कि त्रुटि क्या है। (आप निश्चित रूप से एक फ़ाइल में लिखने के साथ syslog को प्रतिस्थापित कर सकते हैं आदि)

+0

एक चीज जिसे हम निष्कर्ष निकाल सकते हैं, यह 'ओएसईआरआरआर' या 'आईओईआरआर' है। क्या यह किसी प्रकार की त्रुटि पर प्रकाश डालता है? जब मैं अगली त्रुटि करता हूं तो मैं आपके साथ परिणाम साझा करूंगा। एक और महत्वपूर्ण चिंता यह है कि, '_cpcompat.py' को छोड़कर भाग को निष्पादित नहीं कर रहा है, यानी, 'यादृच्छिक आयात करें ...' – haltTm

+0

'OSError' या' IOError' अपवाद किसी भी संख्या सिस्टम त्रुटियों का प्रतिनिधित्व करने के लिए उपयोग किया जा सकता है। उठाए गए अपवाद ऑब्जेक्ट में विशिष्ट त्रुटि होती है जो वास्तव में उपयोगी होगी (अनुमति अस्वीकार की गई है, फ़ाइल नहीं मिली है, पढ़ने के लिए खुला नहीं है, आदि)। जो कुछ भी हो रहा है, उसके नीचे बेहतर तरीके से कब्जा करने की जरूरत है। – tMC

+0

क्या आप मुझे "सिवाय (ओएसईआरर, आईओईआरआर) के पायरन 2.5 संस्करण के साथ एरर के रूप में मदद कर सकते हैं। अभी, मैं अपवाद को छोड़कर कर रहा हूं, ई: 'इसके बजाय, मुझे एक ही उद्देश्य की सेवा करनी चाहिए, मुझे लगता है। – haltTm

0

यदि आपके सिस्टम में पहले से ही/dev/random// dev/urandom पहले से बनाए गए नहीं हैं, तो उन्हें निम्न आदेशों के साथ बनाया जा सकता है:

mknod -m 644/dev/यादृच्छिक ग 1 से 8

mknod -m 644/dev/urandom ग 1 9

chown जड़: जड़/dev/यादृच्छिक/dev/urandom

+0

मेरे सिस्टम पर मोड 666 है। –

संबंधित मुद्दे