7

我正在尝试在 python 中同时使用 argparse 和 logging 模块。我有一个运行的程序有很多可能的选项,并且我已经成功实现了 argparse 模块来处理这个任务。

我想记录程序运行时每个选项的值并将其发送到日志文件。我尝试了以下几件事,并将我遇到的相关错误作为注释包含在它下面。

parser = argparse.ArgumentParser()
parser.add_argument('input', action="store", default='fort.13', type=str)

args = parser.parse_args()

# First try:
logging.info("Input args: " + args)
# TypeError: cannot concatenate 'str' and 'Namespace' objects

# Second try:
for x in args:
  logging.info(x)
# TypeError: 'Namespace' object is not iterable

这样做的正确方法是什么?

4

2 回答 2

12

您可以使用vars来获取已解析参数的属性:

for arg, value in sorted(vars(args).items()):
    logging.info("Argument %s: %r", arg, value)

这在docs中有详细说明。

于 2012-07-20T01:54:30.857 回答
3
logging.info("Input args: %r", args)

只需Namespace在日志中的一行中转储包含所有参数的整个对象。

于 2017-01-11T12:18:46.233 回答