在python中,将日志记录和ncurses转到单独的TTY

我已经编写了一个充当服务器(tcp,kindof)的python程序,并在stdout(和文件)上记录了大量重要信息.该程序在ARM板上运行,并附有少量VGA显示.

现在,我想在板子的物理显示屏上显示一些信息,同时保持启动程序所在的tty的日志记录.

假设我通过SSH连接到ARM板,然后在/ dev / tty3上运行该程序.

我设法使用ncurses在/ dev / tty1(这是物理显示)上显示内容.问题是,所有日志记录也都将显示在物理显示器上.

为了实现这一点,我基本上使用在SO上找到的一些代码将stodut重定向到/ dev / tty1:

NCURSES_TTY = '/dev/tty1'
with open(NCURSES_TTY, 'rb') as inf, open(NCURSES_TTY, 'wb') as outf:
    os.dup2(inf.fileno(), 0)
    os.dup2(outf.fileno(), 1)
    os.dup2(outf.fileno(), 2)

os.environ['TERM'] = 'linux'
logging.debug("Starting server..")

但这当然会重定向所有输出.关于如何将ncurses和普通python日志记录拆分为单独的TTY的任何想法?

解决方法:

好,解决了..这很简单..

1)检测当前的tty

import os
import sys
tty=os.ttyname(sys.stdout.fileno())

2)设置python loggin以记录到检测到的tty

import logging
logger = logging.getLogger(__package__)
logger.setLevel(log_level)

# console_handler = logging.StreamHandler()
console_handler = logging.FileHandler(tty)
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)

3)欺骗stdout和err去想要的tty

NCURSES_TTY = '/dev/tty1'
with open(NCURSES_TTY, 'rb') as inf, open(NCURSES_TTY, 'wb') as outf:
  os.dup2(inf.fileno(), 0)
  os.dup2(outf.fileno(), 1)
  os.dup2(outf.fileno(), 2)

os.environ['TERM'] = 'linux'

4)导入ncurses并进行日志记录

import curses
stdscr = curses.initscr()
curses.noecho()

logging.debug("Tryout")

stdscr.addstr(0, 0, "Current mode: Paola mode",
          curses.A_REVERSE)
stdscr.refresh()

而已. Unix的功能(在OSX上测试).

上一篇:固定的页眉和页脚与ncurses?


下一篇:在ncurses中的指定位置添加相同符号的简短方法是什么?