کلاس Process در Dart چیست؟ - Husen's Blog

کلاس Process در Dart چیست؟

کلاس Process در کتابخانه dart:io به شما امکان می‌دهد که فرآیندهای سیستم را شروع کرده و با آنها تعامل کنید. این کلاس برای اجرای دستورات سیستم، اسکریپت‌ها و برنامه‌های سفارشی از طریق کد Dart استفاده می شود. شروع یک فرآیند ساده می‌توانید از متد Process.run برای اجرای یک دستور ساده سیستم استفاده کنید. این متد دستور را اجرا کرده و منتظر می‌ماند تا کامل شود و سپس یک شیء ProcessResult برمی‌گرداند. در اینجا مثالی از اجرای دستور ls (که محتویات دایرکتوری را در سیستم های شبه یونیکس لیست می‌کند) آورده شده است:

import 'dart:io';

void main() async {
  ProcessResult result = await Process.run('ls', ['-l']);
  print(result.stdout);
}

شروع یک فرآیند و تعامل با آن

اگر نیاز دارید که با یک فرآیند در حال اجرا تعامل کنید، از متد Process.start استفاده کنید. این متد یک شیء Process برمی‌گرداند که به شما امکان می‌دهد با ورودی استاندارد، خروجی استاندارد و جریان خطای فرآیند، تعامل کنید.

void main() async {
  Process process = await Process.start('ls', ['-l']);

  // listen: به خروجی استاندارد
  process.stdout.transform(SystemEncoding().decoder).listen((data) {
    print(data);
  });

  // listen: به خطای استاندارد
  process.stderr.transform(SystemEncoding().decoder).listen((data) {
    print('Error: $data');
  });

  // منتظر ماندن برای خروج فرآیند و دریافت کد خروجی
  int exitCode = await process.exitCode;
  print('Process exited with code $exitCode');
}

نوشتن هنگام اجرای فرایند

گاهی اوقات ممکن است نیاز داشته باشید که ورودی به یک فرآیند در حال اجرا ارسال کنید. می‌توانید این کار را با نوشتن به جریان stdin شیء Process انجام دهید.

import 'dart:io';

void main() async {
  Process process = await Process.start('cat', []);

  // نوشتن هنگام اجرای فرایند
  process.stdin.writeln('Hello from Dart!');
  process.stdin.close();

  // listen: به خروجی استاندارد
  process.stdout.transform(SystemEncoding().decoder).listen((data) {
    print(data);
  });

  // منتظر ماندن برای خروج فرآیند و دریافت کد خروجی
  int exitCode = await process.exitCode;
  print('Process exited with code $exitCode');
}

مدیریت کدهای خروجی

کد خروجی یک فرآیند نشان می‌دهد که آیا فرآیند با موفقیت کامل شده است یا با خطا مواجه شده است. به طور معمول، کد خروجی صفر به معنای موفقیت است و هر کد خروجی غیر صفر نشان دهنده خطا است.

import 'dart:io';

void main() async {
  ProcessResult result = await Process.run('ls', ['-l']);
  print('Exit code: ${result.exitCode}');
  print(result.stdout);
  if (result.stderr.isNotEmpty) {
    print('Error: ${result.stderr}');
  }
}

مدیریت خطاها

همیشه ممکن است با خطاهایی هنگام کار با فرآیندها مواجه شوید، مانند پیدا نکردن فرآیند یا عدم توانایی در شروع آن.

import 'dart:io';

void main() async {
  try {
    Process process = await Process.start('non_existent_command', []);
    int exitCode = await process.exitCode;
    print('Process exited with code $exitCode');
  } catch (e) {
    print('Failed to start process: $e');
  }
}

برای اطلاعات بیشتر درباره کلاس Process و جزئیات بیشتر، به مستندات رسمی Dart مراجعه کنید.