これが私が思いついたものです。ファイル記述子で渡される unicode-rxvt (urxvt) 機能を利用しています。もちろん、これはコンソールではなく X 環境でこれを開発する必要があることを意味します。
from __future__ import print_function
import os
from datetime import datetime
_debugfile = None
def _close_debug(fo):
fo.close()
def DEBUG(*obj):
"""Open a terminal emulator and write messages to it for debugging."""
global _debugfile
if _debugfile is None:
import atexit
masterfd, slavefd = os.openpty()
pid = os.fork()
if pid: # parent
os.close(masterfd)
_debugfile = os.fdopen(slavefd, "w+", 0)
atexit.register(_close_debug, _debugfile)
else: # child
os.close(slavefd)
os.execlp("urxvt", "urxvt", "-pty-fd", str(masterfd))
print(datetime.now(), ":", ", ".join(map(repr, obj)), file=_debugfile)
これにより、DEBUG を初めて呼び出したときに新しいターミナル ウィンドウが自動的に開き、終了時に閉じます。次に、渡されたメッセージがこの新しいウィンドウに表示されます。これが「デバッグ ウィンドウ」です。したがって、メイン アプリはメッセージでごちゃごちゃすることなく正常に動作しますが、この新しいターミナルでデバッグ出力を引き続き確認できます。