سؤال

في نص 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.

نصائح أخرى

sys.ps1 و sys.ps2 يتم تعريفها فقط في الوضع التفاعلي.

من عند 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top