gpt4 book ai didi

python - 将 python 标准输出打印到标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:18 25 4
gpt4 key购买 nike

解释起来有点棘手,所以我提前道歉。

我有一个用 Python 编写的命令行应用程序。它记录到 stderr 和 stdout;日志过滤器配置如下:

class StdErrFilter(logging.Filter):
def filter(self,record):
return 1 if record.levelno >= 30 else 0

class StdOutFilter(logging.Filter):
def filter(self,record):
return 1 if record.levelno <= 20 and record.levelno > 10 else 0

设置日志记录的函数如下所示:

def setup_logging(logger_name):
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter(fmt=LOG_FMT)

err_handler = logging.StreamHandler(sys.__stderr__)
err_handler.addFilter(StdErrFilter())
err_handler.setFormatter(formatter)
logger.addHandler(err_handler)

out_handler = logging.StreamHandler(sys.__stdout__)
out_handler.addFilter(StdOutFilter())
out_handler.setFormatter(formatter)
logger.addHandler(out_handler)

return logger

当直接调用应用程序时,它会按我预期的方式工作,即 info() 及以下打印到 stdout,warn() 及以上打印到 stderr .然而,当在 bash 脚本中进行完全相同的调用时,信息和下面的信息不会打印到终端,但 stderr 仍然按预期工作。我可以将脚本管道标准输出到一个文件,但不能到终端。知道发生了什么事吗?

编辑 我也应该展示 bash 脚本。那里还有一些与为 Python 应用程序构建 args 相关的其他逻辑,但实际调用在 for 循环的底部附近。请注意,Python 应用程序是一个可执行模块。

#!/bin/bash

# provide one argument, the directory to search for ".xml" files.
dir_to_index=$1

FIND=/usr/bin/find
PYTHON=/usr/bin/python

SOLR="http://localhost:8983/solr/pul-development"

BIN="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

marc_to_solr=$BIN/../marc_to_solr
PYTHONPATH=$marc_to_solr:$PYTHONPATH

db_config=$BIN/../etc/database.ini
config=db_config=$BIN/../etc/config.ini

for f in `$FIND $dir_to_index -name "*.xml"`; do
echo "File: $f"
cmd="$PYTHON -m marc_to_solr -d $db_config -s $SOLR -c etc/config.ini -i $f"
`$cmd`
done

最佳答案

问题出在线路上

`$cmd`

bash 中的反引号意味着将标准输出重定向到内部 bash 缓冲区,您可以将其包含在另一个命令中或分配给 bash 变量。只需省略反引号,它就会如您所愿。

关于python - 将 python 标准输出打印到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16422171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com