اجرای کدهای پایتون با deno

چطور میتونیم یک اسکریپت از پایتون یا هر چیز دیگه رو با دینو اجرا کنیم؟
در دینو این کار با تابع Deno.run انجام میشه, در ادامه این مقاله نحوه کار با این تابع رو بررسی میکنیم.

پارامتر های تابع Deno.run باید به صورت یک آبجکت ارسال بشن, که طبق گفته های وبسایت رسمی دینو , حداقل باید شامل آپشنه cmd باشه.
فرض کنین که در مسیر پروژه فایل test.py رو ساختیم و تنها کاری که میکنه چاپ کردن متن "Hello world" هستش, حالا یک فایل جاوا اسکریپت با نام index.js میسازیم و کد های زیر رو مینویسیم داخلش

const p = Deno.run({
  cmd: [&quotpython3&quot, &quottest.py&quot],
});
console.log(p)

تصویر زیر رو ببینید و به خروجی دقت کنین

همینطور که میبینین اطلاعات پروسس انجام شده رو نشون میده
ولی ما خروجی رو میخوایم, درسته؟

برای این کار باید یه جوری هدایتش کنیم به خروجی برنامه خودمون
تصویر زیر رو ببینید و به تغییراتش توجه کنین

خب خب خب !
به آبجکت ارسالی به تابع Deno.run دو تا آپشن دیگه اضافه کردیم, با این کار خروجی و خطا ها رو مثل یک لوله به برنامه خودمون متصل کردیم (به جای piped میتونستین عبارت null رو قرار بدین تا نادیده گرفته بشه).

توی خط 8 با متد output خروجی رو دریافت کردیم که البته قابل استفاده نیست و باید رمزگشایی بشه
به همین منظور توی خط 9 با استفاده از کلاس TextDecoder و متد decode خروجی استاندارد متن رو برگشت دادیم توی همون متغیر خط 8

در خط 11 ارتباط با پروسه رو قطع میکنیم (اگر این خط رو قرار ندین مشکلی پیش نمیاد ولی من جایی خوندم که نوشتن این خط مهمه).

در خط 13 هم خروجی استاندار رو در ترمینال چاپ میکنیم, همونطور که میبینین Hello world چاپ شده.



نکته اینجاست اگر شما از قصد یک خطا تولید کنین ( مثلا به جای test.py بنویسین tes.py ) و برنامه رو اجرا کنین هیچی چاپ نمیشه, حتی خطا.
در این صورت نمیتونیم خطا ها رو مدیریت کنیم و این خیلی بده.


نگران نباشین دریافت خطا ها به سادگی دریافت خروجی استاندارده, به تصویر زیر نگاه کنین

من یک خطای عمدی ایجاد کردم و همونطور که میبینین خطا رو نشون میده

کار زیادی نکردم خط 12 و 13 خطا رو دریافت میکنن و خیلی مشابه خط 8 و 9 هستن تنها تفاوتشون در استفاده از متد هستش

خط 17 تا 22 هم کاملا مشخصه! در صورت وجود خطا نشونش میده در غیر این صورت خروجی رو نشون میده

راستش خیلی بیشتر میشه توضیح داد ولی زیادی طولانی شد, احتمالا در آینده قسمت دوم رو منتشر میکنم.
ممنونم از اینکه این مقاله رو مطالعه کردین.
این اولین مقاله من بود, اگر ایرادی داشت عذر میخوام:)