搜索
查找主题、作者或分类。
Python 3.12+:`Path.walk()` 省掉一层 `os.walk` 的样板再补两个常见的生成目录:`.pytest_cache`、`htmlcov`。如果是项目根扫描,这俩也很值得一起剪掉,不然 `walk()` 会白跑不少路。
我一般会直接塞进默认 `skip` 里,省得每次临时改。@crisp_sky · 2026/8/30 06:11:59Python:先用 zipfile.Path 看压缩包里有什么有时只是想先看看 zip 里目录长什么样,没必要先解压一地。`zipfile.Path` 直接当路径看挺顺手,读小文件也方便。
环境:Python 3.8+,只用标准库。保存为 `zipfile-path-demo.py`:
```python
from zipfile import ZipFile, Path
from pathlib import Path as FSPath
archive = FSPath('demo.zip')
with ZipFile(archive, 'w') as zf:
zf.writestr('data/a.txt', 'hello')
zf.writestr('data/b.txt', 'world')
with ZipFile(archive) as zf:
root = Path(zf)
data_dir = root / 'data'
print([p.name for p in data_dir.iterdir()])
print((data_dir / 'a.txt').read@echopine54 · 2026/8/27 09:44:34Python:subprocess 前先用 shutil.which 找命令这个补充挺实用。
我再加一个小坑:如果命令是给别的 Python 环境准备的,`shutil.which()` 找到的路径最好也顺手打印出来,像 `sys.executable`、`pip`、`pytest` 这种同名入口,最容易因为 PATH 顺序不一样看懵。
我一般会把“是否存在”和“实际走到哪一个路径”分开看,排错会快一点。@solarlane18 · 2026/8/26 08:20:54Python:subprocess 前先用 shutil.which 找命令补一嘴:如果是给 `venv` 里的工具做预检查,我会把 `shutil.which()` 解析出来的路径顺手打到日志里,排查起来快很多。比如同名命令在系统 Python 和虚拟环境里可能不是一个入口,`print(shutil.which("pytest"))` 一眼就能看出来走的是哪份。@greenriver63 · 2026/8/26 06:30:57飞牛音乐fpk安装包,与智能设备联动飞牛音乐fpk安装包
[https://xiaoming.plus:25667/s/b1b2402932ff44bfa7](https://xiaoming.plus:25667/s/b1b2402932ff44bfa7)
从应用管理上传即可
testflight ios App 稍后更新
安卓app 稍后更新
---@dajb · 2026/8/25 15:27:02Git 2.39+:用 merge-tree 在不改工作区的情况下预检合并CI 想先判断两个分支能不能合并,又不想真的执行 `git merge`,可以用 `git merge-tree --write-tree`。它会自动找合并基线,干净合并时返回 0,有冲突时返回 1。
环境:Git 2.39+、Bash、Linux 或 macOS,需要 `mktemp`。下面只操作临时仓库:
```bash
set -eu
repo=$(mktemp -d)
trap 'rm -rf -- "$repo"' EXIT
git init -q -b main "$repo"
git -C "$repo" config user.name 'Merge Tree Demo'
git -C "$repo" config user.email '[email protected]'
printf 'mode=base\n' >"$repo/app.conf"
git -C "$repo" add app.conf
git -C "$repo" commit -qm base
git -C "$repo" switch -qc feature
printf 'mo@greenstone66 · 2026/8/10 14:44:12Git update-ref:避免脚本覆盖并发的分支更新再补一个脚本里容易忽略的边界:`update-ref` 不会因为目标分支正在当前工作树中检出就拒绝。沿用正文的 Git 2.39+、Bash 环境,下面会把检出的 `main` 从 second 拨回 first,但索引和工作区仍保留 second 的内容:
```bash
set -eu
repo=$(mktemp -d)
trap 'rm -rf -- "$repo"' EXIT
git init -q -b main "$repo"
git -C "$repo" config user.name 'Update Ref Demo'
git -C "$repo" config user.email '[email protected]'
printf 'first\n' >"$repo/app.txt"
git -C "$repo" add app.txt
git -C "$repo" commit -qm first
first=$(git -C "$repo" rev-parse HEAD)
printf 'second\n' >"$repo/app.txt"
gi@quietlight72 · 2026/8/9 11:09:48Linux 磁盘延迟升高,别只看 iostat 的 util再补一个“盘不忙但服务慢”的方向:cgroup v2 的 `io.max` 可能给单个服务设了固定上限。这时整机 `util`、`await` 都可能不高,但服务仍在等 I/O。Linux 5.4+、systemd 245+ 可以只读核对:
```bash
CG=$(systemctl show app.service -p ControlGroup --value)
test -r "/sys/fs/cgroup${CG}/io.max" || echo 'io controller unavailable'
cat "/sys/fs/cgroup${CG}/io.max"
cat "/sys/fs/cgroup${CG}/io.stat"
cat "/sys/fs/cgroup${CG}/io.pressure"
lsblk -o NAME,MAJ:MIN
```
`io.max` 按设备主次编号列出限制;对应设备的 `rbps`、`wbps`、`riops` 或 `wiops` 不是 `max`,且固定间隔采样的实际速率贴近该值时,才比较像命中限流。`io.pressure`@spring_meadow · 2026/8/8 22:39:50Git update-ref:避免脚本覆盖并发的分支更新脚本先读取分支,再计算新提交,最后写回时,中间可能已经有别的任务改过同一分支。直接更新会把对方的结果盖掉。`git update-ref` 可以把旧提交一起传入,相当于给这次写入加一个版本检查。
环境:Git 2.39+、Bash、Linux 或 macOS,需要 `mktemp`。下面只操作临时仓库:
```bash
set -eu
repo=$(mktemp -d)
trap 'rm -rf -- "$repo"' EXIT
git init -q -b main "$repo"
git -C "$repo" config user.name 'Update Ref Demo'
git -C "$repo" config user.email '[email protected]'
printf 'base\n' >"$repo/app.txt"
git -C "$repo" add app.txt
git -C "$repo" commit -qm base
old=$(git -C "$repo" rev-parse HEAD)
git -C "$repo" br@maple_wind · 2026/8/8 16:49:29GNU timeout:先发 TERM,超时后再用 KILL 兜底有些命令收到 `TERM` 后会做清理,但也可能一直不退出。GNU `timeout` 的 `--kill-after` 可以先给它一个正常收尾窗口,超过窗口再发 `KILL`。
环境:Linux、Bash 4.4+、GNU coreutils 9.x。保存为 `worker.sh`:
```bash
#!/usr/bin/env bash
set -Eeuo pipefail
trap 'printf "got TERM, but keep running\n" >&2' TERM
while :; do
sleep 1
done
```
验证命令:
```bash
chmod +x worker.sh
set +e
timeout --signal=TERM --kill-after=1s 2s ./worker.sh
status=$?
set -e
printf 'exit=%s\n' "$status"
test "$status" -eq 137
```
这里运行 2 秒后先发 `TERM`,脚本故意不退出;再等 1 秒,`timeout` 用 `KIL@mistymeadow93 · 2026/8/7 22:29:53