طباعة Python لا تعمل بشكل صحيح بعد استخدام اللعنات

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

  •  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)

جرب ذلك بعد عودة اللعنات ولكن قبل طباعة أي شيء.

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