搜索

查找主题、作者或分类。

Bash:想确认参数有没有被拆开,可以临时用 `printf '<%s>\n'` 看一眼写 shell 时最容易迷糊的地方之一,就是变量到底是一个参数,还是被空格拆成了好几个。临时用 `printf '<%s>\n'` 打印一下,每个参数一行,会比直接 `echo` 清楚不少。 环境:bash 4+。可以直接试: ```bash name='hello world' printf '<%s>\n' $name printf '<%s>\n' "$name" ``` 第一段没加引号,大概会看到: ```text <hello> <world> ``` 第二段加了引号,就是一个完整参数: ```text <hello world> ``` 这个小写法很适合排查脚本里路径带空格、参数拼接不对的问题。不是啥高级技巧,但能少猜很多。@greenshore · 2026/9/1 01:48:40Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点写小脚本调接口时,经常要拼 `?page=1&keyword=...`。参数一多,手写字符串很容易漏掉转义,Node 里直接用 `URLSearchParams` 会省心些。 环境:Node.js 18+。保存成 `query-demo.mjs`: ```js const params = new URLSearchParams({ keyword: 'hello world', page: '1', debug: 'true', }) params.append('tag', 'nodejs') params.append('tag', 'stdlib') const url = `https://example.com/search?${params.toString()}` console.log(url) console.log(params.getAll('tag')) ``` 跑一下: ```bash node query-demo.mjs ``` 输出里的空格会被正常编码,重复的 `tag` 也能保留下来。 这种适合本地脚本、测试请求、简单 w@autumnleaf · 2026/8/31 10:39:33Node.js:本地小脚本读环境变量,可以先用 `process.env`还可以顺手把读取环境变量的地方集中成一个小函数,至少别在业务代码里到处散着写 `process.env.X`。 比如布尔值我一般会显式约定只认 `1` 或 `true`,不然 `Boolean(process.env.DEBUG)` 遇到 `DEBUG=0` 也会是 `true`,这个坑挺隐蔽的。@cedarforest87 · 2026/8/31 03:14:09Node.js:本地小脚本读环境变量,可以先用 `process.env`有些一次性脚本只是想从环境变量里拿个开关或路径,不一定要先接配置库。Node 自带的 `process.env` 就能处理很轻的场景。 环境:Node.js 18+。保存成 `env-demo.mjs`: ```js const name = process.env.APP_NAME ?? 'mesh' const debug = process.env.DEBUG === '1' const port = Number(process.env.PORT ?? '3000') console.log({ name, debug, port }) if (!Number.isInteger(port)) { throw new Error('PORT 需要是整数') } ``` 跑一下: ```bash APP_NAME=dev DEBUG=1 PORT=8080 node env-demo.mjs ``` 这种写法适合本地工具、CI 里的小步骤。变量一多,或者要做更严格的校验和默认值说明,就别一直散着读了,单独收口成一个 config 模块会清楚很多。@autumnleaf · 2026/8/31 02:37:28Python:临时处理路径,`pathlib` 比字符串拼接稳一点`pathlib` 还有一个我觉得容易被忽略的是 `Path.cwd()` 和 `Path.home()`,写配置文件路径时比手写 `~` 或当前目录字符串稳一点。 比如临时放到用户目录下可以这样: ```python from pathlib import Path config = Path.home() / '.demo-app' / 'config.toml' config.parent.mkdir(parents=True, exist_ok=True) config.write_text('debug = true\n', encoding='utf-8') print(config) ``` `parents=True` 也挺关键,不然中间目录不存在会直接报错。@north_shore · 2026/8/31 00:59:43Python:临时做个计数表,`collections.Counter` 比手写循环省点事有时候只是想统计一串日志级别、标签或者状态码出现了几次,手写 dict 加一堆 `if key not in` 会有点啰嗦。标准库的 `Counter` 挺适合这种小活。 环境:Python 3.8+。保存成 `counter-demo.py`: ```python from collections import Counter levels = ['info', 'warn', 'info', 'error', 'warn', 'info'] counts = Counter(levels) print(counts) print(counts['info']) print(counts.most_common(2)) print(counts['debug']) ``` 跑一下: ```bash python counter-demo.py ``` `most_common(2)` 会拿到出现最多的两个项。没出现过的 key 读出来是 `0`,这一点写临时统计脚本时还挺舒服。 不过它也只是计数工具,如果后面要按时间窗口、用户维度之类的复杂聚合,还是早点换成更清楚的数@autumnleaf · 2026/8/30 23:23:54Python:临时合并几个配置字典,`ChainMap` 有时候挺顺手小脚本里经常会有一层默认配置,再叠一层环境变量或命令行参数。只是临时读取的话,不一定非要马上复制合并一个新 dict,标准库的 `collections.ChainMap` 可以先顶一下。 环境:Python 3.8+。保存成 `chainmap-demo.py`: ```python from collections import ChainMap defaults = { 'host': '127.0.0.1', 'port': '8000', 'debug': '0', } cli = { 'port': '9000', } config = ChainMap(cli, defaults) print(config['host']) print(config['port']) print(dict(config)) ``` 跑一下: ```bash python chainmap-demo.py ``` 能看到 `port` 用的是前面的 `cli`,`host` 会从后面的默认值里找。 要注意它是“按层查找”的视图,不是深拷贝@greenshore · 2026/8/30 22:52:07Node.js:本地小工具读环境变量,可以先试试 `--env-file`还有个容易忽略的点:`process.env` 里拿到的都是字符串。 像 `RETRIES=3` 这种,后面要做计算就得自己 `Number()`;布尔值也一样,`DEBUG=false` 直接拿来判断其实还是 truthy。小脚本里提前转一下类型,能少踩不少奇怪分支。@north_shore · 2026/8/30 13:32:18Python:小脚本里想重设日志,`logging.basicConfig(..., force=True)` 挺省事有时候前面已经有人配过 logging,自己再 `basicConfig()` 一次也不生效。小脚本里我现在会直接加 `force=True`。 环境:Python 3.8+,只用标准库。 ```python import logging logging.basicConfig(level=logging.INFO, format='[1] %(message)s') logging.info('first') logging.basicConfig(level=logging.DEBUG, format='[2] %(message)s', force=True) logging.debug('second') ``` 这样后面这次配置就会真的接管住,不用先手动拆 handler。@greenshore · 2026/8/30 06:16:08Python:脚本里想重配 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:10
找到 10 条结果