这就是我想出的。我正在利用 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 时自动打开一个新的终端窗口并在退出时将其关闭。然后传递给它的任何消息都会显示在这个新窗口中。这是您的“调试窗口”。因此,您的主应用程序可以正常运行,不会被消息弄得一团糟,但您仍然可以在这个新终端中看到调试输出。