كيفية استخدام ipshellembed من ipython من داخل الدكتوراه الجارية
-
22-09-2019 - |
سؤال
الرجاء مساعدتي في الحصول على وحدة تحكم 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()