كيفية استخدام ipshellembed من ipython من داخل الدكتوراه الجارية

StackOverflow https://stackoverflow.com/questions/1986805

سؤال

الرجاء مساعدتي في الحصول على وحدة تحكم Ipython المضمنة للركض داخل دكتوراه. يوضح رمز المثال المشكلة وسيقوم بتعليق المحطة الخاصة بك. على bash shell أنا اكتب ctrl-Z ثم قتل ٪ 1 لخروج وقتل ، لأن Ctrl-C لن يعمل.

def some_function():
    """
    >>> some_function()
    'someoutput'
    """
    # now try to drop into an ipython shell to help 
    # with development
    import IPython.Shell; IPython.Shell.IPShellEmbed(argv=[])()
    return 'someoutput'

if __name__ == '__main__':
    import doctest
    print "Running doctest . . ."
    doctest.testmod()

أحب استخدام ipython للمساعدة في كتابة التعليمات البرمجية. الخدعة الشائعة هي استخدام ipython كنقطة توقف في الكود الخاص بي عن طريق الاتصال IPython.Shell.IPShellEmbed. تعمل هذه الخدعة في كل مكان جربتها (داخل Django Manage.py Runserver ، اختبارات الوحدة) ، لكنها لا تعمل داخل الدكتوراه. أعتقد أن الأمر يتعلق بـ Doctest Controls Stdin/Stdout.

شكرا مقدما لمساعدتكم. - فيليب

هل كانت مفيدة؟

المحلول

لقد قمت بإرسال بريد إلكتروني إلى مجموعة مستخدمي ipython وحصلت على بعض المساعدة. هناك الآن أ بطاقة الدعم للحصول على هذه الميزة ثابتة في الإصدارات المستقبلية من Ipython. فيما يلي مقتطف رمز مع حل بديل:

import sys

from IPython.Shell import IPShellEmbed

class IPShellDoctest(IPShellEmbed):
   def __call__(self, *a, **kw):
       sys_stdout_saved = sys.stdout
       sys.stdout = sys.stderr
       try:
           IPShellEmbed.__call__(self, *a, **kw)
       finally:
           sys.stdout = sys_stdout_saved


def some_function():
  """
  >>> some_function()
  'someoutput'
  """
  # now try to drop into an ipython shell to help
  # with development
  IPShellDoctest()(local_ns=locals())
  return 'someoutput'

if __name__ == '__main__':
  import doctest
  print "Running doctest . . ."
  doctest.testmod()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top