أخبر ما إذا كان Python في الوضع التفاعلي
-
23-09-2019 - |
سؤال
في نص Python ، هل هناك أي طريقة لمعرفة ما إذا كان المترجم في الوضع التفاعلي؟ سيكون هذا مفيدًا بحيث ، على سبيل المثال ، عند تشغيل جلسة بيثون تفاعلية واستيراد وحدة نمطية ، يتم تنفيذ رمز مختلف قليلاً (على سبيل المثال ، يتم إيقاف تشغيل التسجيل).
لقد نظرت إلى أخبر ما إذا كان Python في وضع I ومع ذلك ، جربت الرمز هناك ، ومع ذلك ، فإن هذه الوظيفة تُرجع فقط إذا تم استدعاء Python مع علم -i وليس عندما يكون الأمر المستخدم لاستدعاء الوضع التفاعلي python
بدون حجج.
ما أعنيه هو شيء من هذا القبيل:
if __name__=="__main__":
#do stuff
elif __pythonIsInteractive__:
#do other stuff
else:
exit()
المحلول
__main__.__file__
غير موجود في المترجم التفاعلي:
import __main__ as main
print hasattr(main, '__file__')
هذا يذهب أيضا لتشغيل رمز عبر python -c
, ، لكن لا python -m
.
نصائح أخرى
من عند TFM: إذا لم يتم إعطاء خيار واجهة ، فأنا ضمني ، sys.argv [0] هو سلسلة فارغة ("") وسيتم إضافة الدليل الحالي إلى بداية Sys.Path.
إذا استدعى المستخدم المترجم python
ولا توجد حجج ، كما ذكرت ، يمكنك اختبار هذا if sys.argv[0] == ''
. هذا يعود أيضا صحيح إذا بدأ مع python -i
, ، ولكن وفقًا للمستندات ، فهي نفسها وظيفيًا.
يستخدم sys.flags
:
if sys.flags.interactive:
#interactive
else:
#not interactive
ما يلي يعمل مع أو بدون تبديل -i:
#!/usr/bin/python
import sys
# Set the interpreter bool
try:
if sys.ps1: interpreter = True
except AttributeError:
interpreter = False
if sys.flags.interactive: interpreter = True
# Use the interpreter bool
if interpreter: print 'We are in the Interpreter'
else: print 'We are running from the command line'
هذا شيء من شأنه أن يعمل. ضع مقتطف الرمز التالي في ملف ، وقم بتعيين المسار إلى هذا الملف إلى PYTHONSTARTUP
متغيرات البيئة.
__pythonIsInteractive__ = None
ثم يمكنك استخدام
if __name__=="__main__":
#do stuff
elif '__pythonIsInteractive__' in globals():
#do other stuff
else:
exit()
http://docs.python.org/tutorial/Interpreter.html#the-Nteractive-startup-file