Как переопределить «logfile» по умолчанию в модуле python cli?

#python #command-line-interface

#python #интерфейс командной строки

Вопрос:

Я пытаюсь использовать:

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

в частности, тот, cli.log.LoggingApp который автоматически предоставляет вам -l --logfile опцию. Каков наилучший способ переопределить logfile атрибут по умолчанию? Если не -l указано, по умолчанию используется значение None , а вывод выполняется в stdout .

Я хотел бы использовать по умолчанию жестко заданное локальное имя файла.

ОБНОВЛЕНИЕ: я хочу установить местоположение файла журнала на основе значения необязательного аргумента —dir=rundir. Я думаю, что это сложнее, поскольку вам нужно проанализировать аргумент, чтобы узнать значение «dir», которое вы хотите использовать для создания имени файла журнала. Я думаю, что лучшим решением было бы запустить начальные сценарии предварительного запуска и настройки «вручную» и самостоятельно управлять настройкой регистратора.

Комментарии:

1. Просто пришла в голову мысль… Возможно, решение состоит в том, чтобы иметь cli.app.CommandLineApp, которое анализирует аргументы, а затем передает это в одно из приложений для ведения журнала. Если кто-нибудь знает форум, где мои сообщения были бы более уместны, пожалуйста, укажите мне туда. Я очень заинтересован в этом модуле.

Ответ №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. Спасибо. С этим, вероятно, лучше всего работать, хотя будет сложно сделать то, что я на самом деле хочу… Я понимаю, что не был ясен в исходном сообщении. Что я пытался сделать, так это запустить файл журнала в расположении по умолчанию, как указано в необязательном аргументе, т.е. —dir=rundir . Это своего рода пробел в приложении cli, поскольку «dir» будет доступен только после запуска argparser, и я думаю, вам нужно задать имя файла журнала перед настройкой регистратора. Я попытаюсь обновить свой OP.

Ответ №2:

Это тоже не совсем работает: определите приложение ведения журнала внутри приложения командной строки и укажите там файл журнала.

Проблема в том, что вы не получаете подробных / тихих материалов.

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