IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python相对路径的引用注意事项 -> 正文阅读

[Python知识库]python相对路径的引用注意事项

在上一篇文章中(python工程中使用logging_sogobaidu的博客-CSDN博客)提到了loggingConfig引入yaml配置文件,在使用systemctl启动工程后,logging日志没有打印出来。但是,在工程里面下直接使用python3 ****.py时,日志是可以正常打印。当时没找到原因,今天发现了原因。讲原因前,先说下python如何定位path的。

1、path = os.path.abspath(__file__)

获取到的path是.py文件存在的目录。

2、path = os.path.abspath('.')

获取到的是执行python3时所在的目录。

3、在loggingBuild.py中引用yaml文件时,没有使用绝对路径。我们一般理解,没有使用绝对路径,python应该是在文件的同级目录下查找yaml文件。但是,根据观察,python不是在.py文件的同级目录下查询yaml文件,而是在执行启动命令时所在的目录中查找yaml。

4、systemctl start reminder是root用户启动,目录是默认的 / 根目录。这就导致loggingBuild.py未能够查找到yaml文件,导致日志无法正确打印。

5、以上弯路主要还是因为对python的基本概念不了解导致的。python从10多年前陆陆续续的使用,但是真没有在工程上使用,也没有详细的看过Python的原理。

6、对loggingBuild.py进行了调整,以loggingBuild.py文件的绝对路径为基础,拼接出完整的yaml的绝对路径。

import yaml
import logging.config
import os


path = os.path.abspath(__file__)
for i in range(1):
    path = os.path.dirname(path)
    print(path)

path = os.path.join(path, 'loggingConfig.yaml')

if os.path.exists(path):
    with open(path, "r") as f:
        # 1.config=yaml.load(stream,Loader=yaml.FullLoader)
        # 2.config=yaml.safe_load(stream)
        # 3.config = yaml.load(stream, Loader=yaml.CLoader)
        config = yaml.load(f, Loader=yaml.FullLoader)
        logging.config.dictConfig(config)

systemctl start reminder

可以看到日志正常的打印出来:

pi@raspberrypi4:/ $ tail -100f info.log
2022-01-16 20:58:18,897 - commonRemindForWeather - 191 - INFO - 3069516608 - {'Linux': '/home/pi/Music/t0.mp3', 'Windows': 'C:/Users/Administrator/Downloads/t0.mp3'}
2022-01-16 20:58:18,897 - commonRemindForWeather - 192 - INFO - 3069516608 - Linux
2022-01-16 20:58:18,913 - commonRemindForWeather - 205 - INFO - 3069516608 - holiday.getStatus()=H
2022-01-16 20:58:18,915 - commonRemindForWeather - 216 - INFO - 3069516608 - 3.36
2022-01-16 20:58:25,864 - commonRemindForWeather - 191 - INFO - 3069516608 - {'Linux': '/home/pi/Music/sunny_new.mp3', 'Windows': 'C:/Users/Administrator/Downloads/sunny_new.mp3'}
2022-01-16 20:58:25,866 - commonRemindForWeather - 192 - INFO - 3069516608 - Linux
2022-01-16 20:58:25,872 - commonRemindForWeather - 205 - INFO - 3069516608 - holiday.getStatus()=H
2022-01-16 20:58:25,877 - commonRemindForWeather - 216 - INFO - 3069516608 - 3.456
2022-01-16 20:58:32,970 - commonRemindForWeather - 191 - INFO - 3069516608 - {'Linux': '/home/pi/Music/t1.mp3', 'Windows': 'C:/Users/Administrator/Downloads/t1.mp3'}

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:28:10  更:2022-01-17 11:29:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:18:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码