我正在尝试从bash脚本调用python脚本。 (注意:我使用的是python版本3.7( 以下是目录结构(so_test是一个目录(
so_test
shell_script_to_call_py.sh
main_file.py
log_settings.py
文件如下,
shell_script_to_call_py.sh
#!/bin/bash
echo "...Enable Debug..."
python $(cd $(dirname ${BASH_SOURCE[0]}) && pwd)/main_file.py "input_1" --debug
echo "...No Debug..."
python $(cd $(dirname ${BASH_SOURCE[0]}) && pwd)/main_file.py "input_2"
main_file.py
import argparse
import importlib
importlib.import_module("log_settings.py")
from so_test import log_settings
def func1():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
def func2():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, help="input argument 1 is missing")
parser.add_argument("--debug", help="to print debug logs", action="store_true")
args = parser.parse_args()
log_settings.log_conf(args.debug)
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
func1()
func2()
if __name__ == "__main__":
main()
log_settings.py
import logging
from colorlog import ColoredFormatter
def log_config(is_debug_level):
log_format = "%(log_color)s %(levelname)s %(message)s"
if is_debug_level:
logging.root.setLevel(logging.DEBUG)
else:
logging.root.setLevel(logging.INFO)
stream = logging.StreamHandler()
stream.setFormatter(ColoredFormatter(log_format))
global log
log = logging.getLogger('pythonConfig')
log.addHandler(stream)
以下是我面临的两个问题。(作为Python的新手(
- 我无法在main_file.py中正确导入log_settings.py
- 我想跨不同功能访问 main_file(和其他.py文件(中的 log.debug、log.info 等,其中的设置(格式、颜色等(log_settings.py文件中声明。
我得到了以下更改的代码:
-
在函数外部声明 'log' 变量 log_settings.py,以便它可以被其他程序导入。
-
将名为 log_config 的函数重命名为 log_conf,该函数在主程序中引用。
-
在主程序中,将导入语句更新为 从log_settings导入"日志"和"log_conf">
工作代码:
1.log设置.py
import logging
from colorlog import ColoredFormatter
global log
log = logging.getLogger('pythonConfig')
def log_conf(is_debug_level):
log_format = "%(log_color)s %(levelname)s %(message)s"
if is_debug_level:
logging.root.setLevel(logging.DEBUG)
else:
logging.root.setLevel(logging.INFO)
stream = logging.StreamHandler()
stream.setFormatter(ColoredFormatter(log_format))
log.addHandler(stream)
2. main_file.py
import argparse
import importlib
from log_settings import log_conf, log
def func1():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
def func2():
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, help="input argument 1 is missing")
parser.add_argument("--debug", help="to print debug logs", action="store_true")
args = parser.parse_args()
log_conf(args.debug)
log.info("INFO Test")
log.debug("DEBUG Test")
log.warning("WARN Test")
func1()
func2()
if __name__ == "__main__":
main()
测试
$ python3 main_file.py "input_1" --debug
信息信息测试(以绿色显示(
调试调试测试(以白色显示(
警告警告测试(以黄色显示(
信息信息测试
调试调试测试
警告警告测试
信息信息测试
调试调试测试
警告警告测试