मुझे समझ में मुश्किल हो रही है कि recv()
फ़ंक्शन कैसे काम करता है।paramiko Channel.recv() वास्तव में कैसे काम करता है?
http://docs.paramiko.org/en/1.13/api/channel.html#paramiko.channel.Channel.recv
मैं समझता हूँ कि यह एक हिस्सा एक डेटा हर बार जब आप फ़ंक्शन को कॉल प्राप्त कर रहा है, लेकिन कोई संरचना या इस डेटा के आकार पर विस्तृत कर सकते हैं? कहते हैं कि चलो मैं एक कमांड date
भेजने के लिए, मैं नोटिस:
- 1 पढ़ा हो जाता है: "तिथि"
- 2 पढ़ा हो जाता है: वास्तविक प्रतिक्रिया (सोम जून 9 12:04:17 CDT 2014)
- 3 पढ़ने हो जाता है: प्रॉम्प्ट
लेकिन यह टर्मिनल पर यादृच्छिक रूप से दिखाई देने वाले संदेशों को डिबग करने वाले संदेशों को कैसे प्रबंधित करता है?
क्या पिछले पैटर्न वास्तविक बाइट्स (nbytes
) से कम वास्तविक प्रतिक्रिया तक सत्य है?
क्या होता है यदि यह nbytes
से अधिक हो जाता है?
अनुरोध के अनुसार, मैं नीचे कोड का एक टुकड़ा जोड़ दिया है: एक socket.recv(), यह किसी भी विशिष्ट संरचना या आकार नहीं है करने के लिए
while reads<maxReads:
resp = self.__chan.recv(maxBytes)
print resp
self.__buffer += resp
if resp.endswith('$ ') or resp.endswith('# '):
break
reads += 1
यह nbytes अप करने के लिए प्राप्त करना चाहिए। कुछ भी बड़ा और यह अधिकतम बाइट खंड तक ले जाएगा। कुछ भी कम और यह सब कुछ वापस कर देगा क्योंकि यह अधिकतम आकार से कम है। अगली बार जब आप channel.recv को कॉल करेंगे तो यह जारी रहेगा कि आखिरी काटने वाला कहां छोड़ा गया था। इससे कोई फर्क नहीं पड़ता कि यह कहां छोड़ दिया गया आदेश में केवल निर्दिष्ट बाइट्स की अधिकतम संख्या तक ही ले जाएगा। Stderr को डाले गए किसी भी संकेत को recv_stderr का उपयोग करने की आवश्यकता होगी। सुनिश्चित नहीं है कि क्या यह आपके प्रश्न का उत्तर देता है। – Bob
उनमें से एक ummm :) ... एक कमांड भेज रहा है, और अगली बार आरईवी को कॉल करने से मुझे वास्तविक प्रतिक्रिया – user3388884
की बजाय कमांड मिल जाता है, क्या हम उस कोड को देख सकते हैं जहां आप भेजते हैं और recv? यह कुछ आसान हो सकता है कि आपने इसे कैसे लिखा है, आपने देखा नहीं होगा। – MikeRixWolfe