إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

في مكتبه sys في البايثون وداله popen

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [سؤال] في مكتبه sys في البايثون وداله popen

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

    اتمنى انكم بتمام الصحه والعافيه


    سوالي هو داله sys.argv طريقه التعامل معهاا دوختني اانا اعرف قرائه المكتوب في سطر الاوامر اريد منكم ان ترو هذا الكود

    كود PHP:
    if len(sys.argv)<=4:
        
    usage()
    for 
    arg in sys.argv:
         if (
    arg =='-h'):
            try:
               
    rename(sys.argv[2],sys.argv[4])
                
    rename()
            
    except:
                
    pass 
    برنامجي اريده انا يقرا هكذا

    python mero.py -h 12234 -t hello

    تمام انا زينت اللي بعد الاتش المشكله هي عند -t

    python mero.py -h 12234 r hello

    لو المستخدم كتب هكذا البرنامج تمام^
    اريد حل لهذه المشكله بحيث لايقرا الا اللتي بعد -h 12234 -t hello
    كيف اخلي برنامجي يقراهم حيث لو اختلف اماكنهم مثلا المستخدم بل مايكتب اللي فوق يكتب هكذا

    python mero.py -t hello -h 1213


    والسوال الثاني هو داله popen في مكتبه subprocess

    كيفيه عملها بالاكواد


    واسال الله ان يوفق الجميع لما يحب ويرضاا

  • #2
    الله يسامح الجميع سوالي موب ذاك الصعوبه

    تعليق


    • #3
      طوّل بالك أخي العزيز , لم نرى موضوعك فقط

      الدالة arvg لاتستخدم هكذا .. الدالة
      arvg تقرأ المدخلات كلائحة list وتستخدم هكذا :

      كود:
      sys.arvg[x]


      x تساوي ترتيب المدخل , الذي يفرق بينها وبين الائحة ..
      أن اللائحة تبدأ القراءة من الصفر أما argv تبدأ من الواحد


      .. مثلاً , قمت بإدخال :

      كود:
      script.py Barakat 1234 linux


      تستخدمها هكذا :

      كود:
      sys.arvg[1]


      ستقرأ Barakat

      كود:
      sys.arvg[2]


      وستقرأ 1234

      كود:
      sys.arvg[3]


      ستقرأ linux

      وهكذا .. يمكنك إستادها لمتغيرات للتسهيل .. :

      كود:
      var1 =  sys.argv[1]
      var2 =  sys.argv[2]
      var3 =  sys.argv[3]


      مثلا :

      كود:
      #!/usr/bin/python
      import sys
      
      var1 = sys.argv[1]
      var2 = sys.argv[2]
      var3 = sys.argv[3]
      
      print "Argv 1 = ",var1
      print "Argv 2 = ",var2
      print "Argv 3 = ",var3
      الخيارات (مثل -h ) توجد عدّت طرق للتعامل معها ..
      ممكن تعمل دالة function تتعامل معها , لكن توجد طريقة تسهل عليك هنا

      ==================================

      popen هي نفسها الموجودة في المكتبه os , لكنها تختلف عن الموجودة في subprocess بشيء واحد ..

      لما أستدعي برنامج بـ popen مثل فايرفوكس الموجودة في os هكذا :
      كود:
      [FONT=Tahoma][SIZE=2][COLOR=black]
      ....
      
      os.popen("firefox")
      
      ....[/COLOR][/SIZE][/FONT]


      البرنامج سيتوقف عندها .. حتّى تقفل فايرفوكس ! اذا أغلقته .. سيستمر التنفيذ ..
      أما لو إستخدمت subprocess .. لن يتوقف التفيذ , سينفذها كعملية جانبية ثم يستمر .. وتستخدم هكذا :

      كود:
      subprocess.Popen("firefox",shell="True")


      لاحظ أنها Popen وليست popen ! .

      لفهم أكثر , جرّب هذين البرنامجين :

      كود:
      #!/usr/bin/python
      import os
      os.popen("gnome-calculator")
      os.popen("firefox")
      os.popen("gnome-terminal")


      كود:
      #!/usr/bin/python
      import subprocess
      subprocess.Popen("gnome-calculator",shell="True")
      subprocess.Popen("firefox",shell="True")
      subprocess.Popen("gnome-terminal",shell="True")



      ولا بأس أن تجرّب هذا الكود ,,

      كود:
      #!/usr/bin/python
      import subprocess
      
      while True:
          subprocess.Popen("firefox",shell="True")

      تحذير , استنزاف رهييييييييب للموارد ( استخدمه كمزحه ثقيله )

      على العموم ,, مكتبة
      subprocess , أجد بها دوال غير مفهومه ولكن يمكنك أن تطور نفسك مستقبلاً
      وتستخدم Threading لإنشاء أكثر من خيط معالجة بنفس الوقت , ولكنها متقدمه قليلاً
      التعديل الأخير تم بواسطة بـركـات; الساعة 02-02-2011, 12:40 AM. سبب آخر: arvg = argv && system = sys
      كتب مفيدة : كتاب لينكس الشامل | دليل المستخدم العربي في أوامر لينكس | مخطوطتك الأولى (script) في الشيل | أوبنتو ببساطة

      تعليق

      يعمل...
      X