2012-04-04 8 views
10

पर न्यूलाइन लिखते समय पाइथन स्टॉप को उत्सर्जित करना बंद करें, मैं विंडोज़ और पायथन पर हूं (बहुत प्रभावी रूप से) मुझे स्टैंड-अलोन '\n' चरित्र को STDOUT भेजने से रोक रहा है। उदाहरण के लिए, निम्नलिखित इच्छा उत्पादन foo\r\nvar:sys.stdout

sys.stdout.write("foo\nvar") 

मैं बंद इस "सुविधा" कैसे बदल सकते हैं? पहले फ़ाइल में लिखना एक विकल्प नहीं है, क्योंकि आउटपुट पाइप किया जा रहा है।

+4

वर्तमान में आप किस कोड का उपयोग कर रहे हैं? – Amber

+0

जो भी sys.stdout खोला गया है। –

+1

मेरा मतलब था कि आप इसे लिखने के लिए क्या उपयोग कर रहे हैं? 'Print'? 'Sys.stdout.write()'? – Amber

उत्तर

11

कुछ भी लिखने से पहले निम्नलिखित का प्रयास करें:

import sys 

if sys.platform == "win32": 
    import os, msvcrt 
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) 

आप केवल अस्थायी रूप से द्विआधारी मोड में बदलना चाहते हैं, आप अपने आप को एक आवरण लिख सकते हैं:

import sys 
from contextlib import contextmanager 

@contextmanager 
def binary_mode(f): 
    if sys.platform != "win32": 
     yield; return 

    import msvcrt, os 
    def setmode(mode): 
     f.flush() 
     msvcrt.setmode(f.fileno(), mode) 

    setmode(os.O_BINARY) 
    try: 
     yield 
    finally: 
     setmode(os.O_TEXT) 

with binary_mode(sys.stdout), binary_mode(sys.stderr): 
    # code 
+0

हाँ, मुझे बस यह भी मिला। –

+0

@ जॉन: 4 सेकंड अंतर: डी मान लें कि हम दोनों एक ही खोज शब्द का उपयोग करते हैं;) –

+0

"यह एक बहुत ही त्वरित Google खोज का नतीजा था", केवल खोज को आसान बनाने के लिए इस तरह से प्रश्न को phrased करने के बाद ही। मैंने लगभग एक घंटे बिताया था "पाइथन स्टॉप उत्सर्जित कैरिज रिटर्न" बनाना, और इसलिए मैं यहां आया था। –

-4

Add 'r' before the string:

sys.stdout.write(r"foo\nvar") 

जैसा कि अपेक्षित है, यह प्रिंट के लिए भी काम करता है।

+0

अहम, यह बैकस्लैश और एन को सचमुच प्रिंट करेगा? –

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