2016-12-26 7 views
3

私は、サーバ(tcp、kindof)として動作し、stdout(およびファイル)に関する重要な情報を記録しているpythonプログラムを書いています。このプログラムは、小さなVGAディスペイが付いたARMボード上で動作します。はPythonでロギングとncursesを別々のTTYに持っています

ここでは、プログラムが起動されたttyのログを維持しながら、ボードの物理的な表示に関する情報を表示します。

私はARM基板にSSHで接続し、/ dev/tty3でプログラムを実行します。

私はncursesを使用して、/ dev/tty1(物理ディスプレイです)に表示することに成功しました。問題は、全てのロギングがpyhsicalディスプレイにも行きます。

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..") 

しかし、これは、もちろん、すべての出力をリダイレクトします。

は、私は基本的にはSOで見つけたコードのいくつかの部分では/ dev/tty1のにstodutをリダイレクトしてきたこれを達成するために。どのようにncursesとプレーンなPythonのログを分割してTTYを分離するかについての考えはありますか?

答えて

1

OKを解決..それはかなり簡単だった..

1)Pythonのloggin設定

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

2)が検出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にログインするための現在のTTYを検出します)は、stdoutをトリックし、目的の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でテスト済み)..

関連する問題