أين تذهب Stdout و Stderr عندما تكون في وضع اللعنات؟
سؤال
أين تذهب Stdout و Stderr عندما تكون اللعنات نشطة؟
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
الناتج الفعلي هو
stdout
stderr
تحديث 0.
الناتج المتوقع هو
stdout
stderr
stdout
stderr
الدخول، ثم الخروج من وضع اللعنات دون تغيير إلى النص النهائي الموضح في المحطة.
المحلول
تنشيط اللعنات يحفظ محتويات شاشة نصية النصية الحالية ومسح الشاشة المذكورة؛ استعادة اللعنات المبادرة محتويات الشاشة (قذف أي شيء تم وضعه على شاشة أثناء عهد اللعنات نفسها). حاول مع هذا البديل من التعليمات البرمجية الخاصة بك وسترى أفضل ما يحدث:
import curses, sys, time
def test_streams(wot):
print wot, "stdout"
print >>sys.stderr, wot, "stderr"
def curses_mode(stdscr):
test_streams("wrap")
time.sleep(1.0)
test_streams("before")
curses.wrapper(curses_mode)
test_streams("after")
سوف تلاحظ wrap stderr
على الشاشة لثانية واحدة (أثناء النوم) - يتم الكتابة فوق الجزء Stdout - ثم تختفي وترى الرابع قبل وبعد خطوط وبعدها على الشاشة الهاتفة الآن (يمكنك إضافة نوام أخرى لمتابعة ما يحدث في حتى مزيد من التفاصيل، إذا كنت تهتم).
لا تنتمي إلى StackOverflow