بعض الشرح عن subprocess.Popen في بايثون

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته



بعض الشرح عن subprocess.Popen .



بعض المعلومات المبسطة لن أدخل بأشياء قد تصدم الأخرين مثل مجرى الدخل والخرج ومجرى الخطأ و ...إلخ لا تشغلو بالكم بهذه المسميات على الأقل في موضوعي هذا الذي أريد أن أوضحه فقط هو تصورو  أن هناك إنبوبين واحد إسمه stdout و واحد إسمه stderr إذا تم تنفيذ الأمر بنجاح يتم إرسال المعلومات عن طريق إنبوب stdout اما إذا لم ينجح تنفيذ الأمر يتم إرسال المعلومات عن طريق الإنبوب stderr وهذا فقط لتبسيط الأمور حتى نكمل الشرح وطبعا أنا أتكلم عن لينكس لا أعلم عن باقي الأنظمة.


الذي نريد ان نتعلمه من خلال subprocess.Popen هو تنفيذ أمر ما ثم إذا صح التعبير حفظ الناتج الذي يخرج من الأنبوبين في متغير أو متغيرين ثم بعدها ممكن الإستفادة من الناتج على حسب ما نريد طبعا كل هذا سأحاول شرحه بطريقة مبسطة وبالصور .





لنبدأ :

1-طلبت تنفيذ أمر echo hi ثم وضعت لكل من stdout و stderr قيمة والتي هي subprocess.PIPE وحفظت النتيجة في متغير سميته  out.

2-نلاحظ ان قيمة out هي كائن من نوع subprocess.Popen .

3-إذا صح التعبير قمت بتحويل هذا الكائن إلى tuple فيها قيمتين وهم مخرجات  stdout و stderr .

4-نلاحظ القيمتين ,القيمة الاول هي مخرجات  stdout ولهذا نجد كلمة hi لأن الامر تم تنفيذه بنجاح أما القيمة الثانية هي مخرجات stderr وهي فارغة الأن لأن الامر تم تنفيذه من دون أي خطأ .


5-قمت بطلب فقط أول قيمة من ال tuple والتي هي مخرجات stdout .

6-إستخدمت دالة strip لإزالت المسافات الفارغة نلاحظ كان سابقا هناك n\ إختصار لسطر جديد .

 7-قمت بإزالت المسافات الفارغة ثم حولت القيمة إلى نص من نوع str حتى اتعامل معه بشكل أريح على العموم هذا ما سنحتاجه عادتا أي أننا عادتا نتعامل مع نصوص من نوع str .




ممكن إختصار الامر وطلب مخرجات  stdout بسطر واحد نلاحظ [0] اي أننا طلبنا أول عنصر من ال tuple .



 ذات الشيء لاكني تعمدت وضع تنفيذ امر  غير صحيح لهذا طلبت ثاني عنصر من ال tuple .




أيضا ذات المبدأ لاكني بدل طلب كل قيمة لوحدها من خلال موقعها في ال tuple قمت بحفظ اول قيمة في ال tuple في متغير سميته out وثاني قيمة حفظتها في متغير سميته error .




فقك مثال بسيط لكيف ممكن أن نستفيد من الأمر إذا كان عدد الاحرف في متغير out أكبر من صفر هذا يعني ان الأمر تم بنجاح إطبع success ثم إطبع بعدها الناتج ,أما غير ذالك إطبع Fail والخطأ الذي ظهر ,ملاحظة الصورة التي قبلها ذات المبدأ.







أيضا ذات المبدأ انا فقط إستبدلت دالة print بنافذة تظهر فيها المخرجات وهذا أمر ليس موضوعنا اﻷن انا فقط أضع بعض أمثلة عن كيفية الإستفادة من ما أشرحه.





أخيرا إذا أردنا أن تخرج النتيجة دائما من stdout نستبدل subprocess.PIPE ب subprocess.STOUT في stderr نلاحظ ان المخرجات من stderr ستصبح دائما None والمخرجات ستخرج دائما من خلال stdout بغض النظر عن صحة تنفيذ الامر من عدمه.



 أخيرا أريد أن أذكر أن في الإصدارات الحديثة من بايثون أظن إصدار 3.5 و أعلى تم إضافة subprocess.run وهي توفر السهولة وتجمع اكثر من شيء مثلا ستغنيك عن subprocess.call و subprocess.Popen و بعض الأشياء ...إلخ .

 لاكن للتوافقية من المهم أن تعرف الإثنين لأنك لا تعرف من يستخدم السكربت أو البرنامج الخاص بك أي إصدار يستخدم لهذا Popen قد تكون أكثر توافقية مع إصدارات بايثون على العموم  لا أعرف إذا ساشرح عن subprocess.run  لاحقا إن شاء الله سأفعل لاكن لست متأكد .




شارك الموضوع

مواضيع ذات صلة

التسميات

2016 (1) 23 (1) 24 (3) 25 (1) 26 (1) 27 (1) 28 (1) 29 (1) 30 (1) 31 (1) إتصال (1) إختراق (2) أدة (1) أدوات (1) إرسال (1) أرش (1) إسترجاع (1) إستعلام (1) أشياء (7) أشياء تفعلها (8) إصدارات (1) إصلاح (6) إصلاحrealtek (1) إضافات (1) إضافة (1) أعجوبة (1) أعجوية (1) إعداد (1) إقاف (2) أقسام (1) ألعاب (2) الفرق (1) الفلاشة (1) القسم هوم (1) الكتابة بالعربية (1) إلى جانب (1) أندرويد (1) إنشاء (1) إنشاء مستودع (1) أيات (1) أيزو (1) أيقومات (1) أيقونات (1) ايقونات (2) باتش (1) بارامتر (1) بايثون (16) برامج (56) برامج إسلامية (2) برنامج (19) برودباند (1) بعد (7) بعد التثبيت (8) بلوتوث (1) بناء (1) بناء توزيعة (1) بيئة عمل (1) تثبيت (29) تجهيز (2) تجهيو من دون (2) تحزيم (2) تحقق (1) تحويل (1) تخصيص (5) ترجمة (2) ترقية (1) تسجيل الشاشة (1) تشغيل (3) تعريف (13) تعطيل (2) تعلم (6) تفعلها (7) تفعيل (2) تقطع الأحرف (1) تقعيل (1) تنزيل (2) تورنت (1) توزيعة (1) توسعة (1) ثيم (5) ثيمات (1) جافا (1) جماليات (7) جنوم (1) حجم (1) حرق (2) حزمة (1) حل (2) دالة (1) دورة (1) روتر (1) ريدهات (2) سكربت (2) شرح (11) صورة متحركة (1) فايرفوكس (1) فتح منفذ (1) فصل (1) فلاشة (3) فيدورا (29) فيدورا بالعربي (1) قاموس (1) كالي (2) كتاب (2) كتب (2) كرت (1) كروت الشاشة (1) كلمة المرور (2) كورس (1) كورورا (1) لعبة (1) لينكس (2) لينكسو (1) ماهو (6) متغير البيئة (1) مجانا (1) محاكات (2) محاكي (1) محمل الإقلاع إصلاح (1) محمول (1) مستودعات (1) مشكلة (2) ملف نصي (1) من إصدار (1) نظام ملفات (1) نمط (2) نواة (1) هجين (4) واجهات (1) وايرلس (1) وهمي (2) ويندوز (2) access token (1) active (2) add (1) after (7) alias (1) andoid studio (1) android (2) android studio (1) Apache (2) appstream (1) arboot (1) arboot fix (1) arch (3) archiso (1) arfedoraccframework (3) arfedoracontrolcenter (3) arfedy (1) atari (1) atom (1) ayat (1) bicon (1) blivet (1) blivet-gui (1) bls (1) bluetooth (1) book (2) books (2) bootloader fix (1) boxes (3) broadband (1) broadcom (1) broadwayd (1) bugzilla (1) build (2) builddep (1) bumblebee (1) bumbleebe (2) burn (2) byzanz (1) c# (1) calamares (1) camera (1) cannot open display (1) cannot open display: :0 (1) ccna (1) cd (2) centos (1) change (2) chsh (1) cisco (1) clion (1) clone (1) code.org (1) command (2) command line (2) commands (2) comps (1) connect (1) contra (1) convert (1) copr (1) could not connect to the debugger (1) cpu (1) cpufreq (1) createrepo (1) csharp (1) css (1) curlew (1) custom (2) dbus (3) dconf (1) dd (1) Decryption (1) defragment (2) desktop (1) desktop entry (1) dictionary (1) Digital signature (1) disks (1) dnf (14) do (7) docker (1) dolphine (1) download (2) downloads manager (1) dply (1) DRI PRIME (1) driver (9) dukto (1) e2fsck (1) efi (4) el forkane (1) elforkane (1) elif (1) emergency (3) emergency mode (3) emulator (1) enable (2) Encryption (1) entries (1) error mounting /dev/sd (1) ext4 (1) extend (1) extensions (2) fakenes (1) fast startup (2) fceux (1) fedora (45) fedora 25 alpha (1) fedora cloude (1) fedora28 (1) fedoraوفيدورا (1) fedy (1) fgmac (2) fgmac-24 (1) file (1) find (1) firefox (2) fix (10) flash mem (1) flash memory (2) flashplayer (1) flatpak (4) forward (1) fpaste (1) free (1) freebsd (1) freevpn (1) function (1) game (3) games (2) gedit (1) genymotion (1) gettext (1) gif (1) gimp (1) gio (1) github (5) github.io (1) glibc-common (1) gmaclinux (2) gnome (16) gnome boxes (1) gnome disk (1) gnome shell (13) gnome terminal (1) gnome-disks (1) gnu (1) godot (1) goldendict (1) google web designer (1) gpg (2) gradio (1) group (2) grub (7) grub2 (1) grubenv (1) gstreamer (1) gtk (8) gtk+ (1) gvrecord (1) hack (2) hash (4) hdmi (3) hibernate (1) home (2) hosspot (1) html (1) http (1) hybrid (2) icon (2) icons (3) ide (1) if (1) install (32) installf (9) installing (7) intellij idea (1) internet downlaod manager (1) iso (2) java (3) jdk (2) jetbrains (1) jetbrains toolbox (1) kali (2) kde (3) kernel (1) kernel parameters (1) key (1) kickstarts (3) korora (1) krita (1) kvm (2) kvm switches (1) lamp (1) laps (1) learn (1) legacy (1) legacy bios (3) libreoffice (2) libvirt (1) life is trange (1) linux (8) lutris (1) lv (1) lvm (2) mac (4) macros (1) mageia (1) make distro (1) mariadb (1) MariaDB and PHP Lamp Server (1) markdown (2) mate terminal (1) mbr (1) md5sum (1) mirro (1) mkconfig (1) mo (1) mono (2) monodevelop (2) mount (1) mp4 (1) multi screen (1) mumble (1) murmur (1) natron (1) nautilus (2) nes (1) netbeans (1) netcut (1) nintendo (1) ntfs (2) nvidia (8) objdesktop (1) ojuba (2) oop (1) opensuse (1) openvpn (1) opera (1) optirun (2) oracle (1) os.path (1) package (2) page (1) pages (1) pantheon (1) parameter (1) parameters (1) password (2) patch (1) path (2) pdf (1) peek (1) photoshop (1) php (1) phpstorm (1) plasma (2) plugin (3) plugins (1) plymouth (1) po (1) polkit (1) port (1) portable (1) portmatp (1) PostinstallerF (1) pot (1) powerline (2) powerline-go (1) preset (1) preview (1) primary display (1) primeos (1) primus (1) primusrun (1) private key (1) programs (3) protonvpn (1) pubg (1) public key (1) put (1) pv (1) pycharm (2) pygobject (4) pygtk (5) python (56) pythonk (1) qdbus (1) qemu (3) qemu-kvm (1) query (1) radio (1) raspberry pi (4) raspbian (2) reclaim space (2) record (1) redhat (3) remix (1) remix os (1) repo (4) repofrompath (1) repository (1) reset (1) resize2fs (1) rhel (1) router (1) rpm (7) rpmbuild (1) rtl8188ee (1) rtl8192c (1) rtl8192ce (1) rtl8192cu (1) rtl8192de (1) rtl8192ee (1) rtl8192se (1) rtl8723ae (1) rtl8723be (1) rtl8723com (1) rtl8821ae (1) rubymine (1) salix (1) scratch (2) scratch2.scratch 2 (1) screencast (1) script (2) seconday display (1) self (1) send (1) server (1) settings (2) sha1256sym (1) sha256sum (1) share desktop (1) shell (2) shortcut (1) shutter (1) skel (1) skel ماهو (1) skype (1) skype.برامج (1) slackware (1) software (1) soundcloud (1) source code (1) spec (2) spin (1) sqlmap (1) ssh (3) sshd (2) st-trans (1) steam (2) store (1) su (1) sudo (2) sudoers (1) swap (2) switch (2) Switchable Graphics (1) synergy (1) systemd (1) systemd preset (1) teamviewer (1) terminal (2) theme (5) things (7) thomson (1) thread (2) threading (2) thumbnails (1) to (8) tor (2) tor browser (1) torrent (1) transfer closed with 736700 bytes remaining to read (1) translation (1) turn off (2) tuxcut (1) txt (1) ubuntu (1) uefi (5) unable to mount location (1) unity (1) unity3d (1) upgrade (1) usb (1) useradd (2) utf-8 (1) vega (1) verify (1) vg (1) vgaوتبديل (1) vi (1) video (1) vim (1) vino (1) virsh (1) virt-install (1) virt-manger (1) virtual (1) virtual box (1) virtualbox (3) vmware (3) vnc server (1) vokoscreen (1) vpn (1) web server (1) webstorm (1) wifi (1) windows (4) windows-1256 (1) wine (1) woeusb (1) X Error: BadAccess (1) X Error: BadDrawable (1) xdg-mime (1) xdman (1) xfce (1) xfconf-query (1) yum (2) zeal (1) zealdocs (1)