पायथन में stderr कैसे प्रिंट करें?


1338

Stderr पर लिखने के कई तरीके हैं:

# Note: this first one does not work in Python 3
print >> sys.stderr, "spam"

sys.stderr.write("spam\n")

os.write(2, b"spam\n")

from __future__ import print_function
print("spam", file=sys.stderr)

यही कारण है कि खंडन करने के लिए लगता है अजगर # 13 की ज़ेन , तो क्या फर्क यहाँ है और वहाँ किसी भी लाभ या एक ही रास्ता या अन्य को नुकसान कर रहे हैं? किस तरीके का इस्तेमाल करना चाहिए?

एक होना चाहिए - और अधिमानतः केवल एक - स्पष्ट तरीके से करना।


46
पहला तरीका सूचीबद्ध पायथन 3. में निकाली गई कई चीजों में से एक है। सर्वसम्मति से ऐसा प्रतीत होता है कि >> सिंटैक्स वैसे भी बदसूरत था, और चूंकि प्रिंट अब एक फ़ंक्शन है, सिंटैक्स कभी काम नहीं करेगा।
स्टीव हॉवर्ड

23
मैं उपयोग करता हूं: sys.exit ('त्रुटि: <त्रुटि पाठ>')
स्टार्क

1
बस प्रिंट का उपयोग करें।
PythonMaster202

जवाबों:


1165

मैंने पाया कि यह केवल एक छोटा + लचीला + पोर्टेबल + पठनीय है:

from __future__ import print_function
import sys

def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)

फ़ंक्शन eprintका उपयोग मानक printफ़ंक्शन के समान तरीके से किया जा सकता है :

>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz

29
बस एक विचार: चूंकि यह प्रिंट फ़ंक्शन को आयात करेगा, इसलिए मूल स्क्रिप्ट में हर दूसरे "प्रिंट" को अब "जोड़ना" ("और") "कार्य" करना होगा। तो यह है कि इस पद्धति के खिलाफ एक मामूली हड़ताल, IMO।
दान एच

45
@ डान हाँ यह आपको अपना कोड पायथन 3-तैयार करने के लिए मजबूर करता है । मुझे लगता है कि ऐसा हो सकता है कि बहुत से लोग वास्तव में इसे पसंद करते हैं!
मार्क

18
@ MarkH ... हाँ, यह आपको अपना कोड Python3-तैयार करने के लिए मजबूर करता है ... यह आपको इसे करने के लिए भी मजबूर करता है, बस स्टाडर को कुछ डिबगिंग जानकारी प्रिंट करने के लिए ... जो मुझे एक परेशानी में और मिलेगा ज्यादातर परिस्थितियां जब मैं कुछ डिबग करने की कोशिश कर रहा होता हूं। (मैं नई वाक्यविन्यास त्रुटियों का परिचय नहीं दूंगा!) :-)
Dan H

29
FWIW यह कोड आपको अपने पूरे कार्यक्रम के फ़ंक्शन संस्करण का उपयोग करने के लिए मजबूर नहीं करता हैprint । केवल मॉड्यूल में जिसकी परिभाषा है eprint()। इसे स्वयं एक छोटी फ़ाइल में रखें, eprintइसे अपनी अन्य फ़ाइलों में आयात करें, और printजब तक आप चाहें तब तक कथन का उपयोग जारी रख सकते हैं।
एलेक्सिस

3
इसके अलावा आप प्रिंट से प्रिंट फ़ंक्शन में परिवर्तित कर रहे हैं एक सरल खोज है कि 2to3 आपके लिए पहले से ही स्वचालित है। यदि आप नहीं करते हैं तो बस पहले से ही ऐसा करें; python2 2 साल से कम समय में खत्म हो जाएगा ... 2 और 3 के बीच कुछ चीजें थोड़ी मुश्किल हो सकती हैं; प्रिंट फ़ंक्शन उनमें से एक नहीं है। Docs.python.org/2/library/2to3.html
bobpaul

548
import sys
sys.stderr.write()

मेरी पसंद है, बस अधिक पठनीय और कह रही है कि आप वास्तव में क्या करना चाहते हैं और संस्करणों में पोर्टेबल हैं।

संपादित करें: 'अजगर' होना मेरे लिए पठनीयता और प्रदर्शन पर एक तीसरा विचार है ... इन दो बातों को ध्यान में रखते हुए, अजगर के साथ आपके कोड का 80% हिस्सा पायथोनिक होगा। सूची 'बड़ी चीज' होने की संभावना है जिसका उपयोग अक्सर (पठनीयता) के रूप में नहीं किया जाता है।


88
बस फ्लश करने के लिए मत भूलना।
टेम्पो

10
printबयान का लाभ गैर-स्ट्रिंग मानों की आसान छपाई है, पहले उन्हें परिवर्तित किए बिना। यदि आपको एक प्रिंट स्टेटमेंट की आवश्यकता है, तो मैं इसलिए 3 विकल्प का उपयोग करने की सलाह
दूंगा

56
sys.stderr.write()ऐसा कुछ नहीं है print। यह एक नई पंक्ति नहीं जोड़ता है।
कर्नल पैनिक

41
@ टैटोटो - स्टडर बफर नहीं है, इसलिए फ्लश करने की कोई आवश्यकता नहीं है।
मैट

11
@SkipHuffman आपका मतलब है os.linesep। यह stderrहम बात कर रहे हैं, सब के बाद। नहीं चाहते हैं कि कंसोल गलत न्यूलाइन के साथ गड़बड़ करे।
jpmc26

179

print >> sys.stderrपायथन 3 में चला गया है। http://docs.python.org/3.0/whatsnew/3.0.html कहता है:

Old: print >> sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)

हम में से कई लोगों के लिए, यह कुछ अस्वाभाविक लगता है कि कमांड के अंत तक गंतव्य को फिर से स्थापित किया जाए। वैकल्पिक

sys.stderr.write("fatal error\n")

अधिक वस्तु उन्मुख दिखता है, और सुरुचिपूर्ण ढंग से सामान्य से विशिष्ट तक जाता है। लेकिन ध्यान दें कि writeएक 1: 1 के लिए प्रतिस्थापन नहीं है print


5
मुझे लगता है कि यह वरीयता की बात है, लेकिन मुझे नहीं लगता कि इसके बारे में क्या बदसूरत है print('spam', file=sys.stderr)। यदि आप इसे बार-बार कर रहे हैं, तो आप 'ईप्रिंट' फ़ंक्शन को सबसे लोकप्रिय उत्तर की तरह कोडित कर सकते हैं, लेकिन उस स्थिति में, मैं पूछूंगा कि लॉगिंग में क्या गलत है? stackoverflow.com/a/41304513/1450294
माइकल शेपर

इरादे को स्पष्ट करने का एक और तरीका with sys.stderr as dest:एक इंडेंट कॉल से पहले करना होगाprint("ERROR", file=dest)
MarkHu

130

किसी का loggingअभी तक उल्लेख नहीं किया गया है, लेकिन त्रुटि संदेशों को संप्रेषित करने के लिए विशेष रूप से लॉगिंग बनाई गई थी। बेसिक कॉन्फ़िगरेशन एक स्ट्रीम हैंडलर लेखन को स्टैडर में स्थापित करेगा।

यह स्क्रिप्ट:

# foo.py
import logging

logging.basicConfig(format='%(message)s')
log = logging.getLogger(__name__)
log.warning('I print to stderr by default')
print('hello world')

कमांड लाइन पर चलने पर निम्न परिणाम होता है:

$ python3 foo.py > bar.txt
I print to stderr by default

और bar.txt में stdout पर मुद्रित 'हैलो वर्ल्ड' होगा।


2
मेरे अनुभव में, अधिक लोग प्रिंट से लॉग संदेश का उपयोग करते हैं लॉगिंग से। मुझे लगता है कि python4 को सिर्फ भाषा से प्रिंट निकालना चाहिए और आपको इसके लिए लॉगिंग का उपयोग करने के लिए मजबूर करना चाहिए।
Mnebuerquo

1
यह सबसे अच्छा जवाब है !! ... मैं प्रिंट या sys या जो जानता है के साथ संघर्ष कर रहा था ... जब एक उचित लॉगिंग की आवश्यकता होती है ... अच्छे विचार के लिए धन्यवाद
कार्लोस साल्टोस

129

के लिए अजगर 2 मेरी पसंद है: print >> sys.stderr, 'spam' क्योंकि आप बस इसे परिवर्तित स्ट्रिंग के लिए बिना सूचियों / dicts आदि मुद्रित कर सकते हैं। print >> sys.stderr, {'spam': 'spam'} के बजाय: sys.stderr.write(str({'spam': 'spam'}))


6
एक शब्दकोश मुद्रित करने के लिए अधिक पायथोनिक तरीका "{0}".format({'spam': 'spam'})वैसे भी कुछ के साथ होगा, है ना? मैं कहूंगा कि आपको स्ट्रिंग को स्पष्ट रूप से परिवर्तित करने से बचना चाहिए। संपादित करें: मैं गलती से एक व्याकरण
luketparkinson

1
@luketparkinson पर यह सब डिबगिंग के बारे में है - इसलिए, मुझे लगता है, जितना संभव हो उतना सरल कोड का उपयोग करना बेहतर है।
फ्रैंकोव्सी बोगदान

88
यह पायथन 3 पर काम नहीं करता है, इसलिए आपको नए कोड में इससे बचना चाहिए।
जॉनीजेड

33

मैंने पायथन 3 का उपयोग करते हुए निम्नलिखित किया:

from sys import stderr

def print_err(*args, **kwargs):
    print(*args, file=stderr, **kwargs)

इसलिए अब मैं गाड़ी की वापसी से बचने के लिए, उदाहरण के लिए, कीवर्ड तर्क जोड़ने में सक्षम हूं:

print_err("Error: end of the file reached. The word ", end='')
print_err(word, "was not found")

2
मैं यह सुझाव देने जा रहा था कि आप एक आंशिक का भी उपयोग कर सकते हैं, लेकिन यह महसूस किया कि आंशिक भाग के निर्माण के समय फ़ंक्शन को stderr प्रदान करता है। यह आपको बाद में स्टॉडर पुनर्निर्देशित करने से रोकता है क्योंकि आंशिक रूप से अभी भी मूल स्टॉडर वस्तु धारण करेगा।
रीब

31

मैं कहूंगा कि आपका पहला दृष्टिकोण:

print >> sys.stderr, 'spam' 

यह "वन।" करने का स्पष्ट तरीका है "अन्य लोग नियम # 1 को संतुष्ट नहीं करते हैं (" सुंदर बदसूरत से बेहतर है।)


109
राय अलग है। यह मेरे लिए सबसे कम स्पष्ट है।
porgarmingduod

4
@ अलीवली कोष्ठक नहीं हैं, यह एक पुराना पायथन <= 2 वाक्यविन्यास है, और इसलिए पायथन 3 संगत नहीं है।
रीब

30
मैं कहूंगा कि यह
ज्वालामुखी

4
इसका क्या >>मतलब है कि वाक्यात्मक रूप से? मैं समझता हूं कि यह बैश की नकल करने का एक प्रयास है >, तो क्या यह केवल करने के लिए कुछ जूते का सिंटैक्स है?
दिमित्रो सिरेंको

2
@EarlGray यह C ++ के स्ट्रीम इंसर्शन ऑपरेटर से एक होल्डओवर है:std::cout << "spam";
सीन एलेड

19

यह मानक प्रिंट फ़ंक्शन की नकल करेगा, लेकिन stderr पर आउटपुट

def print_err(*args):
    sys.stderr.write(' '.join(map(str,args)) + '\n')

8
मैं एक sys.stderr.flush ()
AMS

4
@ मेम - क्यों? printएक फ्लश शामिल नहीं है।
19 .19 बजे रोबो

4
जब आप वास्तव में कर सकते हैं तो नकल क्यों करें?
मैड फिजिसिस्ट

19

पायथन 3 में, कोई सिर्फ प्रिंट का उपयोग कर सकता है ():

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

लगभग बॉक्स से बाहर:

import sys
print("Hello, world!", file=sys.stderr)

या:

from sys import stderr
print("Hello, world!", file=stderr)

यह सीधा है और इसके अलावा कुछ भी शामिल करने की आवश्यकता नहीं है sys.stderr


16

EDIT हिंद-दृष्टि में, मुझे लगता है कि बदलते sys.stderr के साथ संभावित भ्रम और अपडेट किए गए व्यवहार को नहीं देखने से यह उत्तर उतना आसान नहीं है जितना कि एक साधारण फ़ंक्शन का उपयोग करना।

आंशिक का उपयोग करना आपको केवल 1 पंक्ति का कोड बचाता है। संभावित भ्रम कोड की 1 पंक्ति को बचाने के लायक नहीं है।

मूल

इसे और भी आसान बनाने के लिए, यहां एक संस्करण है जो 'आंशिक' का उपयोग करता है, जो रैपिंग फ़ंक्शन में एक बड़ी मदद है।

from __future__ import print_function
import sys
from functools import partial

error = partial(print, file=sys.stderr)

आप तब इसका उपयोग करें

error('An error occured!')

आप यह जांच कर सकते हैं कि यह निम्नलिखित के द्वारा ( http://coreygoldberg.blogspot.com.au/2009/05/python-redirect-or-turn-off-ddout-and से ओवर-राइडिंग कोड करके stderr पर प्रिंट कर रहा है और stdout नहीं है) .html ):

# over-ride stderr to prove that this function works.
class NullDevice():
    def write(self, s):
        pass
sys.stderr = NullDevice()

# we must import print error AFTER we've removed the null device because
# it has been assigned and will not be re-evaluated.
# assume error function is in print_error.py
from print_error import error

# no message should be printed
error("You won't see this error!")

इस के लिए नकारात्मक पक्ष यह आंशिक है प्रदान करती है निर्माण के समय लिपटे कार्य करने के लिए sys.stderr का मूल्य। जिसका अर्थ है, यदि आप बाद में स्ट्रीडर को पुनर्निर्देशित करते हैं तो यह इस फ़ंक्शन को प्रभावित नहीं करेगा। यदि आप stderr को पुनर्निर्देशित करने की योजना बनाते हैं, तो इस पृष्ठ पर aaguirre द्वारा उल्लिखित ** kwargs विधि का उपयोग करें ।


क्या क्यूरी गोल्डबर्ग मशीन पर कोरी गोल्डबर्ग का कोड सबसे अच्छा है? : पी
एजी हैमरथिफ़

1
BTW: "करी" एक (अधिक) उपयोगी खोज कीवर्ड है यदि आप "आंशिक" के बारे में अधिक जानना चाहते हैं।
22

5

यही बात stdout पर लागू होती है:

print 'spam'
sys.stdout.write('spam\n')

जैसा कि अन्य उत्तरों में कहा गया है, प्रिंट एक सुंदर इंटरफ़ेस प्रदान करता है जो अक्सर अधिक सुविधाजनक होता है (उदाहरण के लिए डिबग मुद्रण के लिए), जबकि लिखना तेज है और यह तब भी अधिक सुविधाजनक हो सकता है जब आपको निश्चित रूप से आउटपुट का प्रारूप तैयार करना हो। मैं रखरखाव पर भी विचार करूंगा:

  1. आप बाद में stdout / stderr और एक नियमित फ़ाइल के बीच स्विच करने का निर्णय ले सकते हैं।

  2. पायथन 3 में प्रिंट () सिंटैक्स बदल गया है, इसलिए यदि आपको दोनों संस्करणों का समर्थन करने की आवश्यकता है, तो लिखना () बेहतर हो सकता है।


4
का उपयोग करते हुए from __future__ import print_functionएक बेहतर तरीका है 3. दोनों अजगर 2.6+ और अजगर का समर्थन करने के
फोनिक्स

4

मैं अजगर 3.4.3 में काम कर रहा हूं। मैं थोड़ा टाइपिंग कर रहा हूं, जिससे पता चलता है कि मैं यहां कैसे पहुंचा:

[18:19 jsilverman@JSILVERMAN-LT7 pexpect]$ python3
>>> import sys
>>> print("testing", file=sys.stderr)
testing
>>>
[18:19 jsilverman@JSILVERMAN-LT7 pexpect]$ 

काम किया? एक फ़ाइल पर पुनः निर्देशित करने का प्रयास करें और देखें कि क्या होता है:

[18:22 jsilverman@JSILVERMAN-LT7 pexpect]$ python3 2> /tmp/test.txt
>>> import sys
>>> print("testing", file=sys.stderr)
>>> [18:22 jsilverman@JSILVERMAN-LT7 pexpect]$
[18:22 jsilverman@JSILVERMAN-LT7 pexpect]$ cat /tmp/test.txt
Python 3.4.3 (default, May  5 2015, 17:58:45)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
testing

[18:22 jsilverman@JSILVERMAN-LT7 pexpect]$

खैर, इस तथ्य से अलग कि अजगर जो आपको देता है, उसका थोड़ा परिचय स्टडर्र (जहां यह जाएगा?) में घिस दिया गया है, यह काम करता है।


2

यदि आप एक साधारण परीक्षण करते हैं:

import time
import sys

def run1(runs):
    x = 0
    cur = time.time()
    while x < runs:
        x += 1
        print >> sys.stderr, 'X'
    elapsed = (time.time()-cur)
    return elapsed

def run2(runs):
    x = 0
    cur = time.time()
    while x < runs:
        x += 1
        sys.stderr.write('X\n')
        sys.stderr.flush()
    elapsed = (time.time()-cur)
    return elapsed

def compare(runs):
    sum1, sum2 = 0, 0
    x = 0
    while x < runs:
        x += 1
        sum1 += run1(runs)
        sum2 += run2(runs)
    return sum1, sum2

if __name__ == '__main__':
    s1, s2 = compare(1000)
    print "Using (print >> sys.stderr, 'X'): %s" %(s1)
    print "Using (sys.stderr.write('X'),sys.stderr.flush()):%s" %(s2)
    print "Ratio: %f" %(float(s1) / float(s2))

आप पाएंगे कि sys.stderr.write () लगातार 1.81 गुना तेज है!


अगर मैं इसे चलाता हूं तो मुझे बहुत छोटा अंतर दिखाई देता है। यह दिलचस्प है कि अधिकांश उत्तर प्रिंट फ़ंक्शन (अजगर 3) को अनदेखा करते हैं। मैंने पहले इसे (जड़ता) कभी इस्तेमाल नहीं किया है, लेकिन मैंने सोचा कि मैं इस टाइमिंग स्क्रिप्ट को चलाऊंगा और प्रिंट फ़ंक्शन को जोड़ूंगा। प्रिंट स्टेटमेंट और फ़ंक्शन की प्रत्यक्ष तुलना संभव नहीं है ( भविष्य से आयात पूरी फ़ाइल पर लागू होता है और प्रिंट स्टेटमेंट को मास्क करता है) लेकिन इस कोड को फिर से लिखने के बजाय प्रिंट फ़ंक्शन का उपयोग करने के लिए मुझे एक बड़ी गति दिखाई देती है (~ 1.6 हालांकि कुछ परिवर्तनीय ) प्रिंट फ़ंक्शन के पक्ष में।
हामिश

1
इस परीक्षण का परिणाम किसी तरह भ्रामक है। 'X' के बजाय 'XXXXXXXXXXXXXXXXXXXX' प्रिंट करें और अनुपात 1.05 हो जाता है । मुझे लगता है कि अधिकांश अजगर कार्यक्रमों को एक ही चरित्र से अधिक प्रिंट करने की आवश्यकता होती है।
हमेशा

14
मैं मुद्रण चेतावनी जैसी किसी चीज़ के लिए प्रदर्शन की परवाह नहीं करता।
विम

मुझे पता है कि यह एक समय हो गया है, लेकिन आपने मेरे पोस्ट के बाद समान रूप से उत्तर दिया ... यदि आप प्रदर्शन के बारे में कार नहीं करते हैं तो मैं सुझाव दूंगा कि अधिक pythonic तरीका sys.stderr.write और WTF का उपयोग नहीं होगा? ">" अक्षर। यदि यह sys.stdout नाम स्थान बहुत लंबा है तो आप इसका नाम बदल सकते हैं ... (यानी sys आयात stderr stderr_fh के रूप में)। तो फिर तुम stderr_fh.write ("ब्लाह") कर सकते हैं
ThePracticalOne

1
[३/३] भले ही यह बेंचमार्क अधिक सटीक था, लेकिन शायद यह चिंता करने लायक नहीं है। जैसा कि नुथ ने लिखा है: "प्रोग्रामर बहुत समय बर्बाद करने के बारे में सोचते हैं, या चिंता करते हैं, उनके कार्यक्रमों के गैर-महत्वपूर्ण हिस्सों की गति, और दक्षता पर इन प्रयासों का वास्तव में एक मजबूत नकारात्मक प्रभाव पड़ता है जब डिबगिंग और रखरखाव पर विचार किया जाता है। हमें छोटे से भूलना चाहिए। क्षमता, समय के 97% के बारे में कहते हैं: समय से पहले अनुकूलन सभी बुराई की जड़ है। "
कोरी गोल्डबर्ग

1

यदि आप किसी त्रुटि के कारण प्रोग्राम से बाहर निकलना चाहते हैं, तो उपयोग करें:

sys.exit("Your program caused a fatal error. ... description ...")

और import sysहेडर में।


-2

प्रश्न का उत्तर है: अजगर में स्टैडर प्रिंट करने के लिए अलग-अलग तरीके हैं, लेकिन यह 1. पर निर्भर करता है) कि हम किस पायथन संस्करण का उपयोग कर रहे हैं 2.) हम क्या चाहते हैं सटीक उत्पादन।

प्रिंट और स्टोडर के लेखन कार्य के बीच अंतर: stderr : stderr (मानक त्रुटि) पाइप है जो हर UNIX / Linux सिस्टम में बनाया गया है, जब आपका प्रोग्राम क्रैश हो जाता है और डिबगिंग जानकारी प्रिंट करता है (जैसे कि पायथन में एक ट्रेसबैक), यह stderr को जाता है पाइप।

प्रिंट : प्रिंट एक रैपर है जो इनपुट्स को प्रारूपित करता है (इनपुट अंत में तर्क और नई रेखा के बीच का स्थान होता है) और इसके बाद किसी दिए गए ऑब्जेक्ट के लेखन कार्य को कॉल करता है, डिफ़ॉल्ट रूप से दी गई वस्तु sys.stdout है, लेकिन हम कर सकते हैं फाइल पास करें यानी हम इनपुट को फाइल में भी प्रिंट कर सकते हैं।

Python2: अगर हम python2 का उपयोग कर रहे हैं तो

>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi

Python2 अनुगामी अल्पविराम Python3 में एक पैरामीटर बन जाता है, इसलिए यदि हम प्रिंट के बाद नई रेखा से बचने के लिए अनुगामी अल्पविराम का उपयोग करते हैं, तो यह Python3 में प्रिंट की तरह दिखेगा ('टेक्स्ट टू प्रिंट', अंत = '') जो Python2 के तहत एक वाक्यविन्यास त्रुटि है। ।

http://python3porting.com/noconv.html

अगर हम python3 में sceario से ऊपर की जाँच करें:

>>> import sys
>>> print("hi")
hi

पायथन 2.6 के तहत एक फ़ंक्शन में प्रिंट बनाने के लिए भविष्य का आयात होता है। इसलिए किसी भी सिंटैक्स त्रुटियों और अन्य अंतरों से बचने के लिए हमें किसी भी फ़ाइल को शुरू करना चाहिए जहां हम भविष्य के आयात print_function से प्रिंट () का उपयोग करते हैं। भविष्य आयात केवल अजगर 2.6 के तहत काम करता है और बाद में, अजगर 2.5 के लिए तो और पहले आप दो विकल्प हैं। आप या तो अधिक जटिल प्रिंट को कुछ सरल में बदल सकते हैं, या आप एक अलग प्रिंट फ़ंक्शन का उपयोग कर सकते हैं जो Python2 और Python3 दोनों के तहत काम करता है।

>>> from __future__ import print_function
>>> 
>>> def printex(*args, **kwargs):
...     print(*args, file=sys.stderr, **kwargs)
... 
>>> printex("hii")
hii
>>>

मामला: ध्यान दिया जाना चाहिए कि sys.stderr.write () या sys.stdout.write () (stdout (मानक आउटपुट) एक पाइप है जो हर UNIX / Linux सिस्टम में बनाया गया है) प्रिंट के लिए प्रतिस्थापन नहीं है, लेकिन हां हम इसे किसी मामले में एक विकल्प के रूप में उपयोग कर सकते हैं। प्रिंट एक रैपर है जो अंत में अंतरिक्ष और न्यूलाइन के साथ इनपुट को लपेटता है और लिखने के लिए लिखने के फ़ंक्शन का उपयोग करता है। यही कारण है कि sys.stderr.write () तेज है।

नोट: हम लॉगिंग का उपयोग करके ट्रेस और डीबग भी कर सकते हैं

#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)

https://docs.python.org/2/library/logging.html#logger-objects

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.