الخروج إلى سطر الأوامر في بيثون
-
24-09-2019 - |
سؤال
لديّ نص أريد الخروج مبكرًا تحت بعض الحالات:
if not "id" in dir():
print "id not set, cannot continue"
# exit here!
# otherwise continue with the rest of the script...
print "alright..."
[ more code ]
أقوم بتشغيل هذا البرنامج النصي باستخدام execfile("foo.py")
من موجه Python Interactive وأود أن يخرج البرنامج النصي إلى مترجم تفاعلي. كيف أقوم بهذا العمل؟ إذا استخدمت sys.exit()
, ، مترجم بيثون يخرج تماما.
المحلول
ضع كتلة الرمز الخاص بك في طريقة وعودة من هذه الطريقة ، مثل هذا:
def do_the_thing():
if not "id" in dir():
print "id not set, cannot continue"
return
# exit here!
# otherwise continue with the rest of the script...
print "alright..."
# [ more code ]
# Call the method
do_the_thing()
أيضًا ، ما لم يكن هناك سبب وجيه لاستخدام execfile () ، فمن المحتمل أن يتم وضع هذه الطريقة في وحدة نمطية ، حيث يمكن استدعاؤها من نص Python آخر عن طريق استيرادها:
import mymodule
mymodule.do_the_thing()
نصائح أخرى
في المترجم التفاعلي ؛ امساك SystemExit
أرتفع بواسطة sys.exit
وتجاهلها:
try:
execfile("mymodule.py")
except SystemExit:
pass
أنا مهووس قليلاً بـ ipython للعمل التفاعلي ولكن تحقق من البرنامج التعليمي على التضمين قذيفة لحل أكثر قوة من هذا (وهو طريقك الأكثر مباشرة).
بدلاً من استخدام execfile ، يجب أن تجعل البرنامج النصي قابل للاستيراد (اسم=='الأساسية الحماية ، المنفصل إلى وظائف ، وما إلى ذلك) ، ثم اتصل بالوظائف من المترجم.