تطبيق Python cmd و do_shell (!) ، هل يمكنني استخدام shell للتكرار عبر أوامر python؟

0

لذلك أقوم بإنشاء برنامج سطر أوامر باستخدام python ووحدة cmd التي تمنحك موجهًا تفاعليًا يمكنك من خلاله تحديد الأوامر ولديه دعم للمساعدة وما إلى ذلك.

الكثير من المرح. أحد الأوامر المضمنة هو "!" الذي يعيّن وظيفة محددة تسمى "do_shell" وبالاشتراك مع "import.os" يمكنك تشغيل أوامر سطر الأوامر العادية ...

لذا ، إذا كنت أقوم بتشغيل python من bash وأنا في موجه تفاعلي ونوع python ! clear ، سيتم تشغيل الأمر bash clear وامسح الشاشة. (نفس الشيء مع النوافذ ولكن مع cls ). وبخلاف ذلك ، تقوم المطالبة التفاعلية بتشغيل الأوامر التي تحددها لها.

لنفترض أنني حددت أمرًا

def do_greet(self,line)

    print "Welcome to the interactive prompt user\n"

على أي حال...

سؤال: هل يمكنني استخدام هذا التطبيق "do shell" لعكس مستوى ما واستدعاء أمر python محدد؟ قل ، هل يمكنني أن أفعل شيئًا كهذا ، من موجه الثعبان التفاعلي

! (for i in {1..5}; do greet; done)

للتسجيل ، فإن حلقة for تعمل بشكل جيد ، من الواضح أن "تحية" لا. ولا أعرف ما هي الصيغة الصحيحة لذلك ، إذا كان ذلك ممكنًا.

لينتهي بإخراج

Welcome to the interactive prompt user
Welcome to the interactive prompt user
Welcome to the interactive prompt user
Welcome to the interactive prompt user
Welcome to the interactive prompt user

من فضلك قل لي أن هذا ممكن .... من فضلك قل لي أنه يمكنني استخدام حلقات bash وحماقة دون الحاجة إلى تعريفها بشكل صريح في موجه الأوامر الخاص بي.

2 الاجابة

0

أجل! انه ممكن! يجب أن تتغير وظيفة Python ، نظرًا لوجود عائد ضمني للقيمة None عند الطباعة على وحدة التحكم.

يجب أن تبدو وظيفة Python كما يلي:

def do_greet(self,line):

    return "Welcome to the interactive prompt user\n"

في Bash (و CMD) ، يتم تشغيل الأوامر من Python كما يلي:

python -c "import filename; print(do_greet(argument1, argument2))"

اسم الملف هو فقط اسم الملف ، بدون امتداد .py. تأكد من أنك في الدليل الصحيح وأن Python3 في متغيرات البيئة الخاصة بك.

لتشغيل هذا كحلقة في Bash ، سيبدو كما يلي:

$ for i in {1..5}; do python -c "import filename; print(filename.do_greet(arg1, arg2))"; done

إذا كنت تستخدم Python2 ، فيجب أن تبدو متشابهة ، باستثناء أن عبارة الطباعة لن تحتوي على أقواس:

$ for i in {1..5}; do python -c "import filename; print filename.do_greet(arg1, arg2)"; done
:مؤلف
0

لا ، لا توجد طريقة بسيطة لـ Bash لتنفيذ وظيفة Python من داخل برنامج Python الذي يحدد هذه الوظيفة.

يبدو تنفيذ التحكم في التدفق في قشرة Python أكثر وضوحًا بكثير من إدارة إعادة استخدام تلك الأجزاء من Bash بطريقة أو بأخرى.

إذا كنت تعرض وظائف Python الخاصة بك للمستخدم على أي حال ، فلماذا لا تذهب طوال الطريق وتمرر أمر المستخدم إلى Python eval() وظيفة؟

من ناحية أخرى ، يمكنك تحديد بعض السباكة الذكية greet في باش كدالة تعمل python -c 'import sys, yourshell; yourshell.do_greet(*sys.argv[1:])' على الرغم من أن هذا من الواضح أنه يدير عملية فرعية (عملية فرعية أ) جديدة ، لذلك لن يكون بإمكانه الوصول إلى المكونات الداخلية لقذيفة Python قيد التشغيل حاليًا.

:مؤلف
فوق
قائمة طعام