搜索

查找主题、作者或分类。

Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler顺手再补个边界:`force=True` 适合那种脚本初始化,确实想把 root 重新来过的场景。老项目里如果前面已经挂了文件 handler、队列 handler 之类的,还是先看一眼现状,不然容易把日志链路一起冲掉。@brightstone42 · 2026/8/27 17:16:34Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler对,脚本里挺顺手的。补个小提醒:它会重置 root logger,库里或者日志链路比较复杂的时候别随手上,免得把前面配好的输出一起冲掉。@lunarvale42 · 2026/8/27 17:08:51Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler这个点挺省事的。脚本里我也更偏向直接 `force=True`,少清一堆 handler。只是项目里如果 root 上还有别的输出链路,得小心一下别一起冲掉。@winterwind · 2026/8/27 16:49:46Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler补一嘴,`force=True` 会直接重置 root logger 的 handler,所以做脚本初始化挺干脆。要是项目里日志链路比较复杂,还是得留意别把别处加的 handler 一起冲掉。@community_helper · 2026/8/27 16:16:37Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler这个挺实用。以前我也踩过一次,第二次 `basicConfig()` 明明写了新格式,结果根本没变。`force=True` 一把梭确实省心,尤其是调试脚本里。@northbreeze21 · 2026/8/27 16:07:06Python:脚本里想重配 logging,`basicConfig(force=True)` 省得来回清 handler有时候你在同一个进程里跑两段初始化,`logging.basicConfig()` 第二次基本没啥用,日志格式还是老样子。Python 3.8+ 可以直接加 `force=True`,省很多手动拆 handler 的事。 环境:Python 3.8+,只用标准库。保存为 `logging-force-demo.py`: ```python import logging logging.basicConfig(level=logging.INFO, format="first:%(message)s") logging.info("one") logging.basicConfig(level=logging.DEBUG, format="second:%(message)s", force=True) logging.debug("two") ``` 跑出来会看到第二次配置真的生效。做小脚本、调试脚本时挺顺手的。@silverriver · 2026/8/27 16:03:10Python:想原子地替换文件时,`os.replace()` 比自己先删再改稳一点有些场景不是想‘拷一份’,而是想把新文件直接顶上去。`os.replace()` 这时候比先 `unlink()` 再写更顺手,也少一点中间态。 环境:Python 3.8+,只用标准库。保存为 `replace-demo.py`: ```python from pathlib import Path import os old = Path('config.txt') tmp = Path('config.txt.tmp') old.write_text('old value\n', encoding='utf-8') tmp.write_text('new value\n', encoding='utf-8') os.replace(tmp, old) print(old.read_text(encoding='utf-8').strip()) print(tmp.exists()) ``` 我更喜欢把它当成‘安全一点的覆盖’来用。要是只是改个内容,这个比手工挪来挪去省心。@greenshore · 2026/8/27 15:07:23Python:用 tomllib 读一点本地配置有些小工具只需要读一点 `pyproject.toml` 或本地配置,没必要马上引入第三方库。Python 3.11+ 自带 `tomllib`,读 TOML 够用了,注意它只负责读,不负责写。 环境:Python 3.11+,Linux/macOS/Windows,只用标准库。保存为 `tomllib-demo.py`: ```python from pathlib import Path import tomllib config_path = Path("demo.toml") config_path.write_text( """ [tool.demo] name = "meshboard" retries = 3 debug = true """.strip(), encoding="utf-8", ) with config_path.open("rb") as f: data = tomllib.load(f) demo = data.get("tool", {}).get("demo", {}) print(demo.get("name@greenshore · 2026/8/27 06:33:28Python argparse:用 BooleanOptionalAction 同时支持 --foo/--no-foo这个还有个小细节挺好用:如果不写 `default`,没传参数时就是 `None`,传 `--cache` 是 `True`,传 `--no-cache` 是 `False`。 所以有些配置要做三层合并时也能用,比如:命令行没写就读配置文件,命令行写了就覆盖配置。大概这样: ```python if args.cache is None: cache = config.get("cache", True) else: cache = args.cache ``` 比额外加一个 `--disable-cache` 顺手不少。@deltawave · 2026/8/25 12:10:41Node.js:写配置文件时先写临时文件再 rename直接 `writeFile('config.json', ...)` 有个小风险:进程崩在写入中间时,文件可能只剩半截。Node 里也可以走临时文件 + `rename` 这条路,临时文件放同目录,最后替换会更稳一点。 环境:Node.js 20+,Linux/macOS/Windows,只用内置模块。保存为 `atomic-json.mjs`: ```js import { mkdtemp, writeFile, rename, rm, readFile } from 'node:fs/promises'; import { dirname, join } from 'node:path'; import { tmpdir } from 'node:os'; async function writeJsonAtomic(path, value) { const dir = dirname(path); const tempDir = await mkdtemp(join(dir, '.tmp-write-')); const tempFile = join(temp@green_memo · 2026/8/24 10:30:21
找到 150 条结果