मैं ऐसेअजगर के प्रिंट बयान के न्यू लाइन पीढ़ी व्यवहार
print >>f, "Content-Type: text/plain"
के रूप में यह सब कुछ ठीक है और ईमेल के लिए अच्छा है कि प्रिंट बयान के एक बहुत कुछ शामिल कच्चे ईमेल एन्कोड करने के लिए विरासत कोड का एक समूह है ओवरराइड करना है, लेकिन हम HTTP अनुरोध को आउटपुट करने के लिए अब एक ही कोड का लाभ उठा रहा है। समस्या यह है कि पाइथन प्रिंट स्टेटमेंट '\n'
आउटपुट करता है जबकि HTTP को '\r\n'
की आवश्यकता होती है।
ऐसा लगता है कि अजगर की तरह (2.6.4 कम से कम) एक प्रिंट बयान जो कार्यान्वित किया जाता है के लिए एक अनुगामी PRINT_NEWLINE
बाइट कोड के रूप में
ceval.c:1582: err = PyFile_WriteString("\n", w);
इस प्रकार यह प्रतीत होता है कि वहाँ कोई आसान तरीका के डिफ़ॉल्ट न्यू लाइन व्यवहार को ओवरराइड करने के लिए उत्पन्न करता है प्रिंट। मैंने निम्नलिखित समाधानों को
.replace('\n', '\r\n')
करें। यह HTTP संदेशों में हस्तक्षेप करेगा जो मल्टीपार्ट एन्कोडिंग का उपयोग करते हैं।.write
विधिdef write(self, data):
if data == '\n':
data = '\r\n'
return self._file.write(data)
print >>f, text
f.write(text + line_end)
के लिए जहां line_end
हो सकता है '\n'
या '\r\n'
।मेरा मानना है कि तीसरा विकल्प सबसे उपयुक्त होगा। यह सुनना दिलचस्प होगा कि समस्या के लिए आपका पाइथोनिक दृष्टिकोण क्या होगा।
+1: स्थायी रूप से 'प्रिंट' हटाएं। इसे डीबगिंग टूल के रूप में सोचें, न कि उत्पादन कोड का वास्तविक हिस्सा। –