طباعة Python لا تعمل بشكل صحيح بعد استخدام اللعنات
-
01-10-2019 - |
سؤال
لقد خلقت واجهة المستخدم الرسومية بسيطة مع لعنات. ومع ذلك ، عند الانتهاء من قائمة Curses ، لا تقوم وظيفة الطباعة بطباعة أي شيء لفحصها حتى يخرج البرنامج الرئيسي.
في المثال أدناه ، عند تشغيل calc.py ، تتم طباعة النص "قائمة الدليل الموافق" على الشاشة بعد تشغيل FOO (calcdirs). إذا علقت على السطر folderSelection.menu(dirs)
تتم طباعة النص على الشاشة كما يفعل عادة. أيه أفكار؟ أنا استخدم بيثون 2.5
calc.py:
import folderSelection
[...]
calcDirs=folderSelection.menu(dirs)
print "Directory list ok"
foo(calcDirs)
probererselection.py:
import curses
def menu(folders):
global scr
scr = curses.initscr()
curses.noecho() # Do not echo keypresses
curses.cbreak() # No enter required
scr.keypad(1) # Support keypad
curses.curs_set(0) # Do not show the cursor
# Do some calculations
[...]
exitCurses()
return calcDirs
def exitCurses():
global scr
curses.nocbreak()
curses.curs_set(1)
scr.keypad(0)
curses.echo()
curses.endwin()
يحرر: يبدو أن النص قد تأخر بالضرورة حتى ينتهي البرنامج. قد يتأخر فقط حوالي 30-40 ثانية.
المحلول
واجهت مشكلة مماثلة. يبدو أن اللعنات تفعل شيئًا لإخراج الخزارة على stdout. أعتقد أنه يزيد من حجم المخزن المؤقت للإخراج ، أو وضع وضع الإخراج المخزن مؤقتًا.
إعادة فتح stdout مع حجم المخزن المؤقت من الصفر قد إصلاحه.
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
جرب ذلك بعد عودة اللعنات ولكن قبل طباعة أي شيء.