如何在python cli模块中覆盖默认的“logfile”?

时间:2011-11-10 00:09:16

标签: python command-line-interface

我正在尝试使用:

http://packages.python.org/pyCLI/#cli-log-logging-applications

特别是cli.log.LoggingApp,会自动为您提供-l --logfile选项。覆盖默认logfile属性的最佳方法是什么?如果未提供-l,则默认为None,输出将转至stdout

我想将其默认为硬编码的本地文件名。

更新: 我想根据可选的--dir = rundir参数的值设置日志文件位置。我认为这涉及更多,因为您需要解析参数以了解要用于创建日志文件名称的“dir”的值。我认为最好的解决方法是手动运行初始预运行和设置脚本并自行操作记录器设置。

2 个答案:

答案 0 :(得分:1)

您可以通过向装饰器提供logfile kwarg来默认此文件名:

import cli.log


@cli.log.LoggingApp(logfile='default.log')
def foo(app):
    print "I'm in the app!"
    app.log.error("Things are seriously wrong!")


if __name__ == "__main__":
    foo.run()

这样做的唯一问题(至少我可以看到)是生成的帮助是错误的。它仍然声明默认值为stdout(从版本2.0.2开始)。看起来帮助文本在LoggingMixin类中是硬编码的。

答案 1 :(得分:0)

这也不完全有效:在命令行应用程序中定义日志记录应用程序并在那里指定日志文件。

问题是你没有得到详细/安静的东西。

@cli.app.CommandLineApp(description=globals()["__doc__"])
def main(app):
    logfile = app.params.logfile
    if logfile is None:
        logfile = "mylog.log"
    @cli.log.LoggingApp(description=globals()["__doc__"], logfile=logfile)
    def main_with_log(app):
        print("Printing log output to <%s>." % app.params.logfile
main.add_param("-d", "--dir", dest="dirname", default="./", help = "no help")
main.add_param("-l", "--logfile", default=None, help="log to file.")