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