[英]how to use argparser module in python to make a complex command
[英]Python: Use logging module with configparser or argparser
當還利用 configparser 文件加載包含您希望保存日志的位置的配置文件時,使用 Python 的日志記錄模塊記錄腳本正在執行的所有操作的最佳方法是什么。
這是我的示例代碼:
import sys
import os
import logging
import configparser
import argparse
### Create Functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def get_logger(LOG_DIR, FULL_LOG_PATH):
"""Create logger."""
# Create LOG_DIR if it doesn't exist already
try:
os.makedirs(f"{LOG_DIR}")
except:
pass
try:
# Create logger and set level
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
# Configure file handler
formatter = logging.Formatter(
fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt = "%Y-%m-%d_%H-%M-%S")
fh = logging.FileHandler(f"{FULL_LOG_PATH}")
fh.setFormatter(formatter)
fh.setLevel(level=logging.INFO)
# Add handlers to logger
logger.addHandler(fh)
return logger
except:
sys.exit(-1)
def parse_cl_args():
"""Set CLI Arguments."""
try:
# Initiate the parser
parser = argparse.ArgumentParser(
description="Script to scrape Twitter users account information."
)
# Add optional arguments
parser.add_argument(
"-c", "--config-file",
metavar='Config-file',
help="Full path to the global config file containing paths/file names for script.",
required=True
)
# Read parsed arguments from the command line into "args"
args = parser.parse_args()
# Assign the file name to a variable and return it
config_file_path = args.config_file
return config_file_path
except:
sys.exit(-1)
def parse_config_file(config_file_path):
try:
config = configparser.ConfigParser()
config.read(config_file_path)
return config
except:
sys.exit(-1)
# A bunch of other functions
if __name__ == '__main__':
# parse command line args
config_file_path = parse_cl_args()
# parse config file
config = parse_config_file(config_file_path)
# Set logging path
LOG_DIR = os.path.join(config["PATHS"]["LOG_DIR"])
# Set log file name
FULL_LOG_PATH = os.path.join(config["PATHS"]["LOG_DIR"], "mylog.log")
# Get logger
logger = get_logger(
LOG_DIR = LOG_DIR,
FULL_LOG_PATH= FULL_LOG_PATH
)
get_logger() 行上方的所有內容都無法記錄在記錄器中,但如果不先加載我的命令行參數( config_file.ini
)然后解析該文件(其中包含我想要的位置)就無法創建記錄器我的日志要保存)。 有一個更好的方法嗎?
如果您想在知道日志文件的位置之前記錄日志,但也希望這些日志在文件中,您可以使用MemoryHandler ,它是一種特殊類型的 BufferingHandler。 所以你的程序流程是:
setTarget(file_handler)
將 FileHandler 傳遞給它flush()
-> 將步驟 3 中的日志寫入文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.