ورودی های و خروجی ها Standard

ورودی های و خروجی ها Standard (آشنایی با مفهوم های STDIN و STDOUT و STDERR)

یکی از مباحثی که برای یادگیری بهتر Batch Programming نیاز به دانستن آن دارید. ورودی ها و خروجی ها (I/O) استاندارد میباشند. به صورت کلی سه نوع I/O وجود دارد که از قرار زیر میباشند.

ورودی استاندارد یا Standard Input که به اختصار STDIN گفته میشود. هر آنچه که شما با کیبورد تایپ میکنید STDIN میشود یعنی وارد شده های شما توسط کیبورد.

خروجی استاندارد یا Standard Output که به اختصار STDOUT گفته میشود. هر آنچه که با کیبورد وارد نموده اید و توسط مانیتور نمایش داده میشود را STDOUT میگویند. در واقع آنچه را که از مانیتور به عنوان خروجی میبینید STDOUT گفته میشود.

خروجی خطا یا Standard Error که به اختصار STDERR گفته میشود. STDERR هم همانند STDOUT میباشد با این تفاوت که به صورت مستقل برای نمایش خطا استفاده میشود.

هر کدام از سه استاندارد ذکر شده دارای یک کد انحصاری برای خود میباشند. استاندارد STDIN با کد 0 مرجع شده استاندارد STDOUT با کد 1 مرجع شده و استاندارد STDERR با کد 2 مرجع شده.

نام کامل استانداردنام مختصر استانداردکد استاندارد
Standard InputSTDIN0
Standard OutputSTDOUT1
Standard ErrorSTDERR2

 

تغییر مسیر یا Redirection

یکی از وظیفه های عمومی در فایلهای Batch ارسال یا انتقال خروجی برنامه ها به فایلهای متن یا Log میباشد. شما به سادگی میتوانید با علامت یا اپراتور > خروجی برنامه ها را که STDOUT یا STDERR میباشند به یک فایل دیگر ارسال یا منتقل کنید. به مثال زیر توجه کنید:

DIR > Dirlist.txt

دستور بالا خروجی دستور DIR را بجای ارسال به مانیتور به فایل Dirlist.txt منتقل میکند. توجه کنید اگر فقط از یک علامت > استفاده کنید فایل Dirlist.txt بازنویسی یا Overwrite میشود. اما اگر از دو علامت >> استفاده کنید خروجی های جدید به زیر اطلاعات یا خروجی های قبلی منتقل میشوند. پس دیگر عمل بازنویسی یا Overwrite اتفاق نمی افتد. به مثال زیر توجه کنید:

Dir D:\ >>Dirlist.txt

به صورت پیشفرض با استفاده از اپراتور های > و >> خروجی STDOUT ارسال میشود. اما برای ارسال STDERR میتوانید از اعداد مرجع آنها استفاده کنید. برای مثال:

Dir Document.txt 2>>Dirlist.txt

برای ارسال هر دو استاندارد STDERR و STDOUT به یک فایل میتوانید از دستور زیر استفاده کنید:

Dir Document.txt > output.txt 2>&1

تا اینجا از علامت های > و >> برای خروجی گرفتن از دستورات استفاده شده اما برای ورودی گرفتن یا STDIN باید از علامت < استفاده کنید. در واقع بجای ورودی گرفتن از کیبورد میتوانید از یک فایل متنی با علامت < ورودی بگیرید. به مثال زیر توجه کنید:

Sort < Textfile.txt

سرکوب نمودن خروجی برنامه ها

شما به سادگی میتوانید خروجی برنامه ها را سرکوب کنید یا از بین ببرید. یعنی نه خروجی از مانیتور نمایش داده شود نه به فایل خاصی منتقل شود. برای سرکوب نمودن خروجی برنامه ها باید از علامت > به همراه کلمه NUL استفاده کنید. به مثال زیر توجه کنید:

Ping 4.2.2.4 >NUL

در دستور بالا فرایند Ping گرفتن از آدرس 4.2.2.4 انجام میشود اما هیچ خروجی از آن نمایش داده نمیشود.

انتقال خروجی یک برنامه به ورودی یک برنامه دیگر

یکی دیگر از ویژگیهای که در CMD و فایلهای Batch وجود دارد انتقال STDOUT یک برنامه به STDIN یک برنامه دیگر میباشد. مثلا شما میتوانید خروجی برنامه DIR را به صورت مستقیم به برنامه More ارسال کنید. تا بتوانید نتایج دستور DIR را به درستی و به اندازه صفحه خط فرمان مشاهده کنید. برای انتقال STDOUT به STDIN باید از علامت | استفاده کنید. به مثال زیر توجه کنید:

DIR /s | More

به فرایند انتقال خروجی یک برنامه (STDOUT) به ورودی یک برنامه (STDIN) دیگر Piping گفته میشود.

ساخت فایل متن با ورودی CON

شما به سادگی میتوانید با ارسال STDIN کیبورد به STDIN برنامه CMD که CON نام دارد یک فایل متنی بسازید. برای مثال:

TYPE CON > Documents.txt

Hello World

پس از نوشتن محتوای خود با فشردن کلید F6 و زدن کلید Enter خروجی برنامه خود را در فایل متنی Documents.txt ذخیره کنید.

در صورت داشتن هر گونه سوال یا انتقاد تی ام ال منیجر را از محبت خود محروم نکنید.


برای دریافت نسخه PDF مقاله های سایت ابتدا در سایت ثبت نام کنید تا بتوانید به کلیه مقالات به صورت کاملا رایگان دسترسی پیدا کنید. ورود به سایت | ثبت نام در سایت

آموزش مبتدی تا حرفه ای ساخت فایل Batch

فصل اول: مبانی پایه Batch Programming

فصل دوم: کدهای برگشتی یا فایل Batch یا Return Code

فصل سوم: ورودی ها و خروجی های STDIN , STDOUT , STDERR

فصل چهارم: معرفی و ساخت Variable ها با دستور SET

فصل پنجم: اجرای شرطی برنامه ها با دستور IF

فصل ششم: ساخت منو در فایل Batch (با استفاده از دستور IF و SET)

فصل هفتم: دستور FOR برای ساخت حلقه

فصل هشتم: نکات تکمیلی در ساخت فایل Batch (بررسی کلی)


به نظر شما ممکنه کسی با استفاده از کلید های زیر این مطلب رو به اشتراک بذاره؟
محمد برغمدی

محمد برغمدی

امام علی علیه السلام: با مردم آنگونه معاشرت كنيد، كه اگر مرديد بر شما اشك ريزند، و اگر زنده مانديد، با اشتياق سوي شما آيند.

10 دیدگاه روی “ورودی های و خروجی ها Standard

  • اکتبر 3, 2017 در 16:35
    Permalink

    سلام…
    مرسی از اطلاعات خوبی که تو سایتتون گذاشتید..
    یه سوال داشتم
    وقتی بصورت sort شده dir میگیرم میخوام فقط ۵تا فایل اخر رو نشون بده
    میشه راهنماییم کنید؟

    پاسخ
    • محمد برغمدی
      اکتبر 3, 2017 در 17:10
      Permalink

      سلام
      چنین کاری فقط از پس سیستم عامل لینوکس بر میاد. (دستور tail و دستور head)
      متاسفانه در ویندوز دستوری مثل tail نداریم که باهاش تعداد مشخصی از آخرین خطوط رو مشاهده کنید.
      اما فکر میکنم بشه چنین دستوری رو با دستور for درست کرد.

      پاسخ
  • اکتبر 3, 2017 در 17:24
    Permalink

    میشه بگین چجوری؟

    پاسخ
    • محمد برغمدی
      اکتبر 3, 2017 در 17:40
      Permalink

      باید یک فایل Bat درست کنید مثلا با نام tail.bat
      بعد دو تا Argument برای این فایل مشخص کنید که یکیش مربوط به پارامتر تعداد خطوطه و دیگری مربوط به آدرس باشه
      دستور dir رو در دستور for قرار بدیم و خروجی دلخواه رو ازش بگیریم.
      البته کمی کار داره و به سادگی هم قابل ساخت نیست.

      پاسخ
  • اکتبر 3, 2017 در 17:50
    Permalink

    بعید میدونم بتونم…
    یک دنیا ممنون بخاطر راهنمایی و سایت خوبتون

    پاسخ
    • محمد برغمدی
      اکتبر 3, 2017 در 17:56
      Permalink

      خواهش میکنم 🙂
      اگر وقت کردم 100% براتون درستش میکنم و به ایمیل ثبت شده تون پیامش رو ارسال میکنم.

      پاسخ
  • اکتبر 4, 2017 در 13:08
    Permalink

    شما لطف دارید…
    یه سوال دیگه، لیستی که با dir یا هرچیزه دیگه ای بهمون نشون میده رو میتونیم منتقل کنیم به فایل اکسل یا همچین چیزی؟

    پاسخ
    • محمد برغمدی
      اکتبر 4, 2017 در 14:25
      Permalink

      یعنی خروجی stdout رو به یک فایل excel با فرمت xlsx بفرستید؟
      خیر ممکن نیست، اگر هم انجام بدید فایل excel خراب میشه.

      پاسخ
  • اکتبر 4, 2017 در 15:41
    Permalink

    بنظرت بهتر نیست از powershell استفاده کنم؟ البته بلد نیستم کار باهاش رو، ولی میخونم.

    پاسخ
    • محمد برغمدی
      اکتبر 4, 2017 در 16:00
      Permalink

      Powershell خیلی از Command Prompt بهتره اصلا با CMD قابل مقایسه نیست. بله 100% روی Powershell بجای CMD کار کنید.

      پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *