কমান্ড-লাইন অ্যাপ্লিকেশনটিতে স্ট্যান্ডার্ড ত্রুটি স্ট্রিম কখন ব্যবহার করবেন?


9

কমান্ড-লাইন অ্যাপ্লিকেশন লেখার সময় ত্রুটিটি কখন ব্যবহার করা যায় সে সম্পর্কে কোনও গাইডলাইন রয়েছে? আমার অবাক করে দিয়েছি, গুগল করার সময় আমি কিছুই পাইনি।

বিশেষত, আমি এখনই যে প্রশ্নটি নিয়ে উদ্বিগ্ন তা হ'ল এটি ব্যবহারকারীকে ব্যবহার করা উচিত stdoutবা stderrকখন ব্যবহারকারী প্রোগ্রামটিকে অবৈধ যুক্তি দিয়ে ডেকেছিলেন। তবে, আরও বিস্তৃত উত্তরটি খুব প্রশংসিত হয়েছে কারণ এটি অবশ্যই একমাত্র ক্ষেত্রে হবে না যেখানে কোনও প্রোগ্রাম লেখার জন্য একটি সুস্পষ্ট নিয়ম প্রয়োজন যা ব্যবহারকারীর দ্বারা প্রত্যাশিতভাবে আচরণ করে।


নিয়মিত আউটপুটটির সাথে এই ত্রুটি বার্তাগুলির মিশ্রণটি কি ঠিক আছে? উদাহরণস্বরূপ প্রোগ্রাম ডেটা জন্য একটি ফিল্টার?
21:42-

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

উত্তর:


15

হ্যাঁ, stderrযখন ভুল যুক্তি ব্যবহার করা হয় তখন কোনও বার্তা প্রদর্শন করুন । এবং যদি এটির ফলেও অ্যাপ্লিকেশনটি প্রস্থান হয়, তবে শূন্য-বহির্গমন স্থিতি সহ প্রস্থান করুন।

ডায়গনিস্টিক বার্তাগুলির জন্য বা ব্যবহারকারীর মিথস্ক্রিয়ের জন্য আপনার স্ট্যান্ডার্ড ত্রুটি স্ট্রিম ব্যবহার করা উচিত । ডায়াগনস্টিক বার্তাগুলিতে ত্রুটি বার্তা, সতর্কতা এবং অন্যান্য বার্তাগুলি অন্তর্ভুক্ত রয়েছে যা সঠিকভাবে কাজ করার সময় ইউটিলিটির আউটপুটের অংশ নয় ("সঠিকভাবে" যার অর্থ ব্যতিক্রমী কিছুই ঘটছে না, যেমন ফাইলগুলি সন্ধান করা হচ্ছে না বা যা কিছু হতে পারে)।

অনেকগুলি শেল (সমস্ত?) প্রদর্শনের অনুরোধ জানায়, ব্যবহারকারীদের কী কী এবং মেনু ইত্যাদির নির্দেশনা দেয় stderrযাতে পুনর্নির্দেশ stdoutআপনাকে অর্থপূর্ণ উপায়ে শেলের সাথে ইন্টারঅ্যাক্ট করতে বাধা দেয় না।

নিম্নলিখিত এই বিষয়ে একটি ব্লগ পোস্ট থেকে :

এটি ইউনিক্স পাইপের উদ্ভাবক ডগ ম্যাকিলারয়ের একটি উক্তি, কীভাবে কী stderrহয়েছে তা ব্যাখ্যা করে । 'v6' 1976 সালে প্রকাশিত মূল ইউনিক্স অপারেটিং সিস্টেমের নির্দিষ্ট সংস্করণের একটি সংস্করণ উল্লেখ করছে।

সমস্ত প্রোগ্রাম স্ট্যান্ডার্ড আউটপুট উপর ডায়গনিস্টিকস স্থাপন। আউটপুটটিকে fi লেতে পুনঃনির্দেশ করা হলে এটি সর্বদা সমস্যার সৃষ্টি করে, তবে আউটপুটটি একটি অনিরাপদ প্রক্রিয়াতে প্রেরণ করা হলে অসহনীয় হয়ে ওঠে। তবুও, স্ট্যান্ডার্ড-ইনপুট-স্ট্যান্ডার্ড-আউটপুট মডেলের সরলতা লঙ্ঘন করতে রাজি নয়, লোকেরা ভি -6 এর মাধ্যমে এই অবস্থাটিকে সহ্য করে। এর খুব অল্প সময়ের মধ্যেই ডেনিস রিচি স্ট্যান্ডার্ড ত্রুটি পরিচয় করিয়ে গর্ডিয়ান গিঁট কাটলেন। এটা যথেষ্ট ছিল না। পাইপলাইনগুলির সাথে ডায়াগনস্টিকগুলি এক সাথে চলমান বেশ কয়েকটি প্রোগ্রামের থেকে আসতে পারে। তাদের সনাক্ত করার জন্য ডায়াগনস্টিকগুলি প্রয়োজন।
- ডগ ম্যাকিল্রয়, "এ রিসার্চ ইউনিক্স রিডার: প্রোগ্রামার ম্যানুয়াল, ১৯ 1971১-১৯8686 থেকে টীকাগুলি অংশ"

"নিজেকে চিহ্নিত করা" এর অর্থ সহজভাবে বলা "আরে! এটা আমি কথা বলছি! এটি ভুল হয়েছে: [...]":

$ ls nothere
ls: nothere: No such file or directory

এটি stderrকরা বেশি পছন্দনীয়, যেহেতু এটি অন্যথায় যা পড়ছিল তা পড়তে পারা যায় stdout(তবে আমরা lsযাইহোক এটি করি না , আমরা কি করি?)।


সুতরাং আপনি যখন অ্যাপ্লিকেশনটি চলমান হিসাবে ব্যবহারকারীকে কিছু জিজ্ঞাসা করবেন, আপনি স্ট্যাডারের উপর প্রশ্নটি মুদ্রণ করবেন? এটি ঠিক শোনাচ্ছে না। আপনার কি এটির জন্য উত্স আছে? এটি কি কেবলমাত্র এমন অ্যাপ্লিকেশনগুলিতে প্রযোজ্য যার কেবল প্রশ্ন এবং প্রতিক্রিয়া ব্যতীত আউটপুট রয়েছে (ব্যবহারকারী আউটপুটটি কোথাও পাইপ দিতে চাইতে পারে)?
ইউটিএফ -8

@ ইউটিএফ -8 প্রশ্নের পাঠ্যটিকে কি প্রোগ্রামটির আউটপুট অংশ হিসাবে বিবেচনা করা উচিত? ব্যবহারকারী যা টাইপ করেন তা সম্পর্কে কী? আমার মনে হয় না এটি হওয়া উচিত (যেমন শাঁসগুলি এটি হওয়া উচিত বলে মনে করে না)। কিন্তু সম্ভবত এটি প্রয়োগের উপর নির্ভর করে?
কুসালানন্দ

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

@ ইউটিএফ -8 আপনি এই প্রশ্নোত্তরটিকে প্রাসঙ্গিক বলে মনে করতে পারেন: unix.stackexchange.com/q/331611/22222
টেরডন

6

স্ট্যান্ডার্ড স্ট্রিমের জন্য পসিক্স স্পেসিফিকেশন থেকে :

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

অন্য কথায়, ত্রুটি, ডিবাগিংয়ের তথ্য এবং ডায়াগনস্টিক বিভাগে আসা যে কোনও কিছুই .ুকে যায় stderr

আরও তথ্যের জন্য সম্পর্কিত প্রশ্ন দেখুন: অগ্রগতি রিপোর্ট / লগিং তথ্য stderr বা stdout উপর অন্তর্ভুক্ত?

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