রুবিতে $stdout
(ডলারের চিহ্ন দ্বারা পূর্ববর্তী) এবং STDOUT
(সমস্ত ক্যাপে) মধ্যে পার্থক্য কী ? আউটপুট পুনর্নির্দেশ করার সময় কোনটি ব্যবহার করা উচিত এবং কেন? একই জন্য $stderr
এবং STDERR
।
সম্পাদনা: সবেমাত্র একটি সম্পর্কিত প্রশ্ন পাওয়া গেছে ।
রুবিতে $stdout
(ডলারের চিহ্ন দ্বারা পূর্ববর্তী) এবং STDOUT
(সমস্ত ক্যাপে) মধ্যে পার্থক্য কী ? আউটপুট পুনর্নির্দেশ করার সময় কোনটি ব্যবহার করা উচিত এবং কেন? একই জন্য $stderr
এবং STDERR
।
সম্পাদনা: সবেমাত্র একটি সম্পর্কিত প্রশ্ন পাওয়া গেছে ।
$stdout
এবং STDOUT
বনাম $stdin
এবং STDIN
symetrical হয়, মধ্যে পার্থক্য $stdout
এবং $>
বনাম $stdin
এবং $<
নয়।
উত্তর:
$stdout
একটি বৈশ্বিক পরিবর্তনশীল যা বর্তমান স্ট্যান্ডার্ড আউটপুটকে উপস্থাপন করে। STDOUT
একটি ধ্রুবক প্রতিনিধিত্বমূলক স্ট্যান্ডার্ড আউটপুট এবং সাধারণত এর ডিফল্ট মান $stdout
।
STDOUT
ধ্রুবক হওয়ার সাথে সাথে আপনার এটিকে পুনরায় সংজ্ঞায়িত করা উচিত নয়, তবে আপনি $stdout
ত্রুটি / সতর্কতা ছাড়াই পুনরায় সংজ্ঞা দিতে STDOUT
পারবেন (পুনরায় সংজ্ঞায়নের ফলে একটি সতর্কতা বাড়বে)। উদাহরণস্বরূপ, আপনি এটি করতে পারেন:
$stdout = STDERR
একই জন্য $stderr
এবংSTDERR
সুতরাং, আপনার প্রশ্নের অন্য অংশের উত্তর দিতে, আউটপুট পুনর্নির্দেশের জন্য গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করুন, ধ্রুবকগুলি নয়। আপনার কোডে এটিকে আরও পরিবর্তন করতে সচেতন হোন, বৈশ্বিক ভেরিয়েবলগুলি পুনরায় সংজ্ঞায়িত করা আপনার আবেদনের অন্যান্য অংশগুলিকে প্রভাবিত করতে পারে।
$>
, ডিফল্ট আউটপুট স্ট্রিমটি নয় $stdout
।
$stdout
এবং $>
এটি عرفীয় হয়, সুতরাং একটিকে পুনর্নির্দিষ্ট করা অন্যটিকে প্রভাবিত করবে।
IO#reopen
ক্ষেত্রে এটি ব্যবহার করা ভাল $stdout
? আমি এই মতামত সাথে সম্পূর্ণই একমত। $stdout.reopen
পদ্ধতি mutates তার রিসিভার ও যে প্রভাবিত করবে STDOUT
যদি তোমরা পুনরায় নির্ধারণ করেন নি $stdout
আগে। এগুলি প্রতিশব্দ হিসাবে বোঝানো হয় না, দায়িত্বের কারণে তারা যখন বিভিন্ন মান ধরে রাখে এবং STDOUT
আপনার উদ্দেশ্যটি ভেঙে আবার খোলে তখন কিছুই খারাপ হয় না ।
STDOUT
এটি একটি বিশ্বব্যাপী ধ্রুবক, সুতরাং এটি পরিবর্তন করা উচিত নয়। $stdout
একটি পূর্বনির্ধারিত পরিবর্তনশীল, তাই এটি পরিবর্তন করা যায়।আপনি যদি পুনঃনির্দেশ করতে শেলটি ব্যবহার করেন:
$ ruby test.rb > test.log
তবে আপনার স্ক্রিপ্টের জন্য ফাইল বর্ণনাকারী হিসাবে আপনি কোনটি ব্যবহার করবেন তা আপনার স্ক্রিপ্ট কার্যকর হওয়ার আগে নির্ধারিত হচ্ছে তা বিবেচ্য নয়।
তবে, আপনি যদি নিজের রুবি স্ক্রিপ্টের মধ্য থেকে ওএসের এসটিডিউটের জন্য ফাইল বিবরণী পরিবর্তন করার চেষ্টা করছেন, উদাহরণস্বরূপ, সপ্তাহের বর্তমান দিনের উপর ভিত্তি করে লগ ফাইলগুলির একটি ঘূর্ণায়মান সেটটিতে আউটপুট প্রেরণ করার জন্য, তবে আপনি নিশ্চিত করতে চাইবেন আপনি ব্যবহার $stdout
।
STDOUT = $stderr (irb):1: warning: al#=> #<IO:<STDERR>>constant STDOUT >> STDOUT #=> #<IO:<STDERR>>
উভয় $stdout
এবং STDOUT
বিভিন্ন অর্থ আছে। এই বিষয়টিতে রুবির ডকুমেন্টেশন বেশ স্পষ্ট:
$stdout
- বর্তমান মান আউটপুট।STDOUT
- স্ট্যান্ডার্ড আউটপুট। স্ট্যান্ডআউটের জন্য ডিফল্ট মান।
আপনি যখন স্ট্যান্ডার্ড আউটপুটটিতে লিখতে চান, তখন আপনি প্রকৃতপক্ষে বর্তমান স্ট্যান্ডার্ড আউটপুটটি বোঝাতে চান , সুতরাং আপনার এটি লিখতে হবে $stdout
।
STDOUT
খুব অকেজো না। এটি এর জন্য ডিফল্ট মান সংরক্ষণ করে $stdout
। যদি আপনি কখনও পুনরায় নিয়োগ করেন $stdout
তবে আপনি এটির সাথে পূর্ববর্তী মানটিতে পুনঃস্থাপন করতে পারেন $stdout = STDOUT
।
তদতিরিক্ত, আরও একটি পূর্বনির্ধারিত পরিবর্তনশীল রয়েছে:
$>
- মুদ্রণ, প্রিন্টফের জন্য ডিফল্ট আউটপুট যা$stdout
পূর্বনির্ধারিত।
তবে এটি রুবি ২.৩-এর মতো দেখায় এটি কেবল একটি উপাধিকার হিসাবে আচরণ করে $stdout
। পুনরায় বরাদ্দকরণ এর বিপরীতে $stdout
এর মান পরিবর্তন করে $>
।