如何在单独的终端中打印特定变量? (就像实时看到具体信息一样)

问题描述 投票:0回答:2

我正在使用 VSCode 执行 python 脚本,在里面我正在进行大量迭代来检查某些内容是否通过或失败,问题是终端中有很多信息(日志记录),我需要的是如果脚本运行时 X 迭代中出现故障,则在其他终端中打印特定信息以查看当前状态。

比方说:

import logging

for i in range(1000)
   # do stuff
    if something == my_variable:
        logging.info('pass')
    else:
        logging.error('fail')
        print(f'Error in {my_variable} in cycle {i}') #This is what i need in terminal 2

所以基本上是打开或拆分两个 vscode 窗口,其中第二个终端仅显示代码示例中的打印

python terminal printing
2个回答
0
投票

您可以创建一个记录器并将日志发送到多个不同的处理程序。您可以设置记录器的级别,然后将流设置为不同的调试级别。

在下面的代码中,我登录到流处理程序(终端):info()、warning()、error() 和 critical()

Filehandler 将仅记录 error() 和 critical()

在 nix 系统中,您可以观察终端代码,然后在另一个终端中,您可以

tail -f log.txt
观察更高错误的输出。

import logging

# set up Logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# Add Handlers
sh = logging.StreamHandler()
fh = logging.FileHandler("log.txt", "w")
fh.setLevel(logging.ERROR)

logger.addHandler(sh)
logger.addHandler(fh)

for i in range(1000):
   # do stuff
    if i % 2 == 0:
        logger.info('pass')
    else:
        logger.error('fail')
        logger.error(f'Error in  in cycle {i}') #This is what i need in terminal 2

因为你有窗口,所以我会以不同的颜色流式传输第二个处理程序:

fh = logging.StreamHandler()
fh.setLevel(logging.ERROR)
fh.formatter = logging.Formatter("\x1b[31;1m %(message)s \x1b[0m")

颜色


0
投票

每个终端窗口(或选项卡)都分配有一个虚拟终端,您可以使用命令

tty
找到它。现在假设您希望记录变量的终端是
/dev/ttys0001
。在这种情况下,请在 Python 程序中将日志信息写入文件
/dev/ttys0001

© www.soinside.com 2019 - 2024. All rights reserved.