পাইথনে স্ট্যাডারে কীভাবে প্রিন্ট করা যায়?


1338

স্ট্যাডারকে লেখার বিভিন্ন উপায় রয়েছে:

# 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-এ সরানো অনেকগুলি জিনিসের মধ্যে একটি one
স্টিভ হাওয়ার্ড

23
আমি ব্যবহার: sys.exit ( 'ত্রুটি: <ত্রুটি পাঠ্য>')
সম্পূর্ণ

1
শুধু মুদ্রণ ব্যবহার করুন।
পাইথনমাস্টার202

উত্তর:


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
একটি মাত্র চিন্তা: যেহেতু এটি মুদ্রণ ফাংশনটি আমদানি করবে, মূল স্ক্রিপ্টের প্রতিটি অন্যান্য "মুদ্রণ" এখন "ফাংশনযুক্ত" যুক্ত "(" এবং ")" করা দরকার। সুতরাং এটি এই পদ্ধতির বিরুদ্ধে সামান্য ধর্মঘট, আইএমও।
ড্যান এইচ

45
@DanH হ্যাঁ এই বাহিনী আপনি আপনার কোড Python3-প্রস্তুত করা। আমার ধারণা অনেক লোক আসলে এটি পছন্দ করে কেন!
এইচ

18
@ মার্কএইচ ... হ্যাঁ, এটি আপনাকে আপনার কোডটি পাইথন 3-তৈরি করতে বাধ্য করে ... এটি আপনাকে এখনই এটি করতে বাধ্য করে, কেবল স্টাডারের কাছে কিছু ডিবাগিং তথ্য মুদ্রণ করার জন্য ... এতে আমি আরও ঝামেলা পেতে পারি বেশিরভাগ পরিস্থিতিতে যখন আমি কোনও ডিবাগ করার চেষ্টা করি। (আমি বরং নতুন সিনট্যাক্স ত্রুটিগুলি উপস্থাপন করব না!) :-)
ড্যান এইচ

29
FWIW এই কোডটি আপনাকে আপনার পুরো প্রোগ্রামের ফাংশন সংস্করণটি ব্যবহার করতে বাধ্য করে নাprint । শুধুমাত্র সংজ্ঞাযুক্ত মডিউলটিতে eprint()। এটিকে নিজেই একটি ছোট্ট ফাইলে রাখুন, এটিকে eprintআপনার অন্যান্য ফাইলে আমদানি করুন এবং আপনি printযতক্ষণ চাইবেন স্টেটমেন্ট ব্যবহার করা চালিয়ে যেতে পারেন।
Alexis

3
এছাড়াও আপনি মুদ্রণ থেকে মুদ্রণ ফাংশনে রূপান্তর করা একটি সহজ সন্ধান এটি 2to3 ইতিমধ্যে আপনার জন্য স্বয়ংক্রিয়ভাবে প্রতিস্থাপন করে। আপনি না থাকলে কেবল এটি ইতিমধ্যে করুন; পাইথন 2 2 বছরেরও কম সময়ের মধ্যে চলে যাবে ... 2 থেকে 3 এর মধ্যে কিছু জিনিস কিছুটা জটিল হয়ে উঠতে পারে; মুদ্রণ ফাংশন তাদের মধ্যে একটি নয়। Docs.python.org/2/library/2to3.html
ববপল

548
import sys
sys.stderr.write()

আমার পছন্দ, কেবল আরও পাঠযোগ্য এবং আপনি যা করতে চান ঠিক তাই বলছেন এবং সংস্করণগুলিতে বহনযোগ্য।

সম্পাদনা করুন: 'পাইথোনিক' হওয়া আমার কাছে পঠনযোগ্যতা এবং সম্পাদন সম্পর্কে তৃতীয় চিন্তাভাবনা ... এই দুটি বিষয় মাথায় রেখে পাইথন আপনার কোডের ৮০% অজগর হবে। 'বড় জিনিস' হিসাবে বোঝার তালিকা তৈরি করুন যা প্রায়শই ব্যবহৃত হয় না (পঠনযোগ্যতা)।


88
শুধু ফ্লাশ করতে ভুলবেন না।
temoto

10
printবিবৃতিটির সুবিধা হ'ল প্রথমে রূপান্তর না করেই নন-স্ট্রিং মানগুলির সহজ মুদ্রণ। আপনার যদি একটি মুদ্রণ বিবৃতি প্রয়োজন হয়, আমি তাই অজগর 3 প্রস্তুত হতে তৃতীয় বিকল্পটি ব্যবহার করার পরামর্শ দেব
vdboor

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)
হ'ল

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

এবং বার.টি.এস.টি.এস. স্ট্যাডআউটে মুদ্রিত 'হ্যালো ওয়ার্ল্ড' ধারণ করবে।


2
আমার অভিজ্ঞতায় লগিং ব্যবহারের চেয়ে বেশি লোক বার্তা লগ করতে মুদ্রণ ব্যবহার করে। আমি মনে করি পাইথন 4 এর কেবল ভাষা থেকে মুদ্রণ সরিয়ে ফেলতে হবে এবং এর জন্য আপনাকে লগিং ব্যবহার করতে বাধ্য করা উচিত।
Mnebuerquo

1
এটাই সেরা উত্তর !! ... আমি মুদ্রণ বা সিস্টেমে লড়াই করে যাচ্ছিলাম বা কে জানে ... যখন সঠিক লগিং দরকার হয় ... ভাল ধারণাটির জন্য ধন্যবাদ
কার্লোস সালটোস

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
ডিবাগিংয়ের বিষয়ে এই সমস্তই @ লুটপার্কিনসন - সুতরাং, আমি মনে করি, যতটা সম্ভব সহজ কোডটি ব্যবহার করা আরও ভাল।
ফ্রাঙ্কোভস্কিই বোগদান

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
আমি আপনাকে পরামর্শ দিচ্ছি যে আপনিও একটি আংশিক ব্যবহার করতে পারেন, তবে বুঝতে পেরেছিলেন যে আংশিকটি স্ট্যাডারকে আংশিক তৈরির সময় ফাংশনটিতে অর্পণ করে। এটি আপনাকে স্ট্যাডারকে পরে পুনঃনির্দেশিত করতে বাধা দেয় কারণ আংশিক এখনও মূল স্ট্ডার অবজেক্টটি ধরে রাখবে।
রিবস

31

আমি বলব যে আপনার প্রথম পদ্ধতির:

print >> sys.stderr, 'spam' 

এটিই হ'ল "এক…। এটি করার সুস্পষ্ট উপায়" অন্যরা # 1 নিয়ম পূরণ করে না ("কুশ্রীের চেয়ে সুন্দর সুন্দর" ")


109
মতামত পৃথক। এটি আমার কাছে সবচেয়ে কম স্পষ্ট
পোড়ামিংডিংড

4
@ অলিভেলি কোনও বন্ধনী নেই, এটি পুরানো পাইথন <= 2 সিনট্যাক্স, এবং তাই পাইথন 3 সামঞ্জস্যপূর্ণ নয়।
রিবস

30
আমি বলব যে এটি সমস্ত 3
আগ্নেয়গিরি

4
>>সিনট্যাকটিক্যালি এর অর্থ কী ? আমি বুঝতে পারি যে এটি বাশের অনুলিপি করার প্রয়াস >, তাই এটির জন্য কিছু জুতোযুক্ত সিনট্যাক্স না?
Dmytro Sirenko

2
@ ইরলগ্রী এটি সি ++ এর স্ট্রিম সন্নিবেশ অপারেটরের একটি হোল্ডওভার:std::cout << "spam";
সান অলরেড

19

এটি স্ট্যান্ডার্ড স্ট্যান্ডার্ড মুদ্রণ ফাংশন কিন্তু আউটপুট নকল করবে

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

8
আমি একটি sys.stderr.flush ()
এএমএস

4
@ এএমএস - কেন? printএকটি ফ্লাশ অন্তর্ভুক্ত করা হয় না।
রোব

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

সম্পাদনা সালে হিন্দ-দৃষ্টিশক্তি, আমি 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-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 এর মান নির্ধারণ করে। যার অর্থ, আপনি যদি স্ট্যাডারকে পরে পুনঃনির্দেশ করেন তবে এটি এই ফাংশনটিকে প্রভাবিত করবে না। আপনি যদি স্টেডারকে পুনর্নির্দেশের পরিকল্পনা করেন তবে এই পৃষ্ঠায় আগুয়েরে দ্বারা উল্লিখিত ** কোয়ার্গস পদ্ধতিটি ব্যবহার করুন ।


কোরি গোল্ডবার্গের কোডটি কি কোনও রুবে গোল্ডবার্গ মেশিনে সেরা রান? : পি
আগি হামারথিফ

1
বিটিডাব্লু: আপনি যদি "আংশিক" সম্পর্কে আরও জানতে চান তবে "কারিিং" একটি (আরও) দরকারী অনুসন্ধান কীওয়ার্ড।
মার্চ

5

একই স্টাডাউট প্রযোজ্য:

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.writ () ধারাবাহিকভাবে 1.81 গুণ দ্রুত!


আমি এটি চালিয়ে গেলে আমি আরও অনেক ছোট পার্থক্য দেখতে পাচ্ছি। এটি আকর্ষণীয় যে বেশিরভাগ উত্তর মুদ্রণ ফাংশন (পাইথন 3) উপেক্ষা করে। আমি এর আগে (জড়তা) আগে কখনও ব্যবহার করি নি, তবে ভেবেছিলাম আমি এই টাইমিং স্ক্রিপ্টটি চালাব এবং মুদ্রণ ফাংশন যুক্ত করব। মুদ্রণ বিবৃতি এবং ফাংশনটির সরাসরি তুলনা সম্ভব নয় ( ভবিষ্যত থেকে আমদানি পুরো ফাইলের জন্য প্রযোজ্য এবং মুদ্রণ বিবৃতিটি মাস্ক করে) তবে বিবৃতিটির পরিবর্তে মুদ্রণ ফাংশনটি ব্যবহার করার জন্য এই কোডটি পুনরায় লেখালেখি আমি আরও বড় গতি দেখছি (~ 1.6 যদিও কিছুটা পরিবর্তনশীল) ) মুদ্রণ ফাংশনের পক্ষে।
হামিশ

1
এই পরীক্ষার ফলাফলটি একরকম বিভ্রান্তিকর। 'এক্স' এর পরিবর্তে 'XXXXXXXXXXXXXXXXXXXX' মুদ্রণ করুন এবং অনুপাতটি 1.05 এ নেমে যায় । আমি ধরে নিয়েছি বেশিরভাগ অজগর প্রোগ্রামগুলিতে একটি একক চরিত্রের চেয়ে বেশি মুদ্রণ করা দরকার।
সর্বদা

14
সতর্কতা ছাপার মতো কোনও কিছুর জন্য আমি পারফরম্যান্সের বিষয়ে চিন্তা করি না।
wim

আমি জানি কিছুক্ষণ হয়ে গেছে, তবে আপনি আমার পোস্টের পরেও সমানভাবে জবাব দিয়েছেন ... আপনি যদি পারফরম্যান্সের বিষয়ে গাড়ি না করেন তবে আমি যদি পরামর্শ করি যে, পাইথোনিক উপায়টি হবে সিএস.স্টডারআর রাইট এবং না ডাব্লুটিএফ ?! ">>" অক্ষর। যদি এই sys.stdout নেমস্পেসটি দীর্ঘ হয় তবে আপনি এটির পুনরায় নামকরণ করতে পারেন ... (অর্থাত্ sysr আমদানি stderr থেকে stderr_fh হিসাবে)। তারপরে আপনি stderr_fh.writ ("blah")
ThePracticalOne

1
[3/3] এমনকি যদি এই মানদণ্ডটি আরও সঠিক হত তবে এটি উদ্বিগ্ন হওয়ার মতো নয়। নুথ যেমন লিখেছেন: "প্রোগ্রামাররা তাদের প্রোগ্রামগুলির অদ্বিতীয় অংশগুলির গতি সম্পর্কে চিন্তাভাবনা করে, বা উদ্বিগ্ন হয়, এবং ডিবাগিং এবং রক্ষণাবেক্ষণ বিবেচনা করার সময় দক্ষতার এই প্রচেষ্টাগুলি আসলে একটি শক্ত নেতিবাচক প্রভাব ফেলে থাকে। আমাদের ছোট সম্পর্কে ভুলে যাওয়া উচিত কার্যকারিতা, সময়ের প্রায় 97% বলুন: অকালীন অপ্টিমাইজেশন হ'ল সমস্ত মন্দের মূল। "
কোরি গোল্ডবার্গ

1

মারাত্মক ত্রুটির কারণে যদি আপনি কোনও প্রোগ্রাম থেকে প্রস্থান করতে চান তবে ব্যবহার করুন:

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

এবং import sysশিরোনামে।


-2

প্রশ্নের উত্তর হ'ল পাইথনে স্ট্যাডার প্রিন্ট করার বিভিন্ন উপায় রয়েছে তবে এটি 1 এর উপর নির্ভর করে)) আমরা কোন পাইথন সংস্করণটি ব্যবহার করছি ২।

মুদ্রণ এবং স্ট্যাডারের রাইটিং ফাংশনটির মধ্যে পার্থক্য: স্টডারার : স্টার্ডার (স্ট্যান্ডার্ড ত্রুটি) এমন পাইপ যা প্রতিটি ইউএনআইএক্স / লিনাক্স সিস্টেমের মধ্যে অন্তর্নির্মিত হয়, যখন আপনার প্রোগ্রামটি ক্র্যাশ হয় এবং ডিবাগিং তথ্য মুদ্রণ করে (পাইথনের একটি ট্রেসব্যাকের মতো), এটি স্ট্ডারকে যায় নল।

ছাপা : প্রিন্ট এমন একটি মোড়ক যা ইনপুটগুলিকে বিন্যাস করে (ইনপুটটি আর্গুমেন্ট এবং শেষদিকে নতুন লাইনের মধ্যবর্তী স্থান হয়) এবং পরে এটি একটি প্রদত্ত বস্তুর রাইটিং ফাংশনকে ডাকে, ডিফল্টরূপে প্রদত্ত বস্তুটি সিস্টেস্টডআউট হয়, তবে আমরা পারি একটি ফাইল পাস করুন আমরা একটি ফাইল ইনপুট প্রিন্ট করতে পারেন।

পাইথন 2: যদি আমরা পাইথন 2 ব্যবহার করি

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

পাইথন 2 এর পিছনে থাকা কমাটি পাইথন 3 এ প্যারামিটারে পরিণত হয়েছে, সুতরাং আমরা যদি কোনও মুদ্রণের পরে নতুন লাইন এড়াতে ট্রেলিং কমা ব্যবহার করি তবে এটি পাইথন 3 এ মুদ্রণের মতো দেখাবে ('প্রিন্ট টু প্রিন্ট', শেষ = '') যা পাইথন 2 এর অধীনে একটি সিনট্যাক্স ত্রুটি ।

http://python3porting.com/noconv.html

যদি আমরা পাইথন 3 তে উপরের দৃশ্যগুলিটি পরীক্ষা করি:

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

পাইথন ২.6 এর অধীনে কোনও ফাংশনে মুদ্রণ করতে ভবিষ্যতের আমদানি রয়েছে। সুতরাং কোনও সিনট্যাক্স ত্রুটি এবং অন্যান্য পার্থক্য এড়াতে আমাদের ভবিষ্যতের আমদানি মুদ্রণ_ফাংশন সহ যে কোনও ফাইল যেখানে মুদ্রণ () ব্যবহার করা উচিত তা শুরু করা উচিত । ভবিষ্যতে আমদানি শুধুমাত্র পাইথন 2.6 অধীনে কাজ করে এবং পরে, পাইথন 2.5 জন্য তাই এবং তার আগে আপনার কাছে দুটি বিকল্প আছে। আপনি হয় আরও জটিল মুদ্রণটিকে সহজ কিছুতে রূপান্তর করতে পারেন, বা আপনি পৃথক মুদ্রণ ফাংশন ব্যবহার করতে পারেন যা পাইথন 2 এবং পাইথন 3 উভয়ের অধীনে কাজ করে।

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

কেস: sys.stderr.writ () বা sys.stdout.write () (স্টাডআউট (স্ট্যান্ডার্ড আউটপুট) একটি পাইপ যা প্রতিটি ইউনিক্স / লিনাক্স সিস্টেমের মধ্যে নির্মিত) মুদ্রণের জন্য প্রতিস্থাপন নয়, তবে হ্যাঁ আমরা এটি কোনও ক্ষেত্রে বিকল্প হিসাবে ব্যবহার করতে পারি। প্রিন্ট একটি মোড়ক যা শেষে এবং নতুন লাইনের সাথে ইনপুটটি মোড় করে এবং লেখার জন্য রচনা ফাংশনটি ব্যবহার করে। এই কারণেই sys.stderr.writ () দ্রুত হয়।

দ্রষ্টব্য: আমরা লগিং ব্যবহার করে ট্রেস এবং ডিবাগ করতে পারি

#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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.