- 交互契约改对话式询问(禁点选工具、一次1~2问、先铺垫再问),规则库 3.6 - 盘面图默认生成+chart_shot 截图;品牌区、大运/流年小卡信息补全、交流群二维码卡 - day_boundary 子正换日;memory_save --update-chart 换盘留痕;share_export 事件简介+城市级地域 - share_push 失败诊断+代理引导;_runtime_guard;修 STAR_ORDER 三奇贵人 KeyError - README 规则计数 541→542;manifest 重建(1275 文件);测试 142 项全绿
85 lines
3.2 KiB
Python
85 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
||
"""岁运神煞实时查询 —— 模型按需调用。
|
||
|
||
用法:
|
||
python query_shensha.py --gender 女 \
|
||
--pillars "丁亥 乙巳 庚子 辛巳" --target 丙午 [--label "2026 流年"]
|
||
|
||
输出(stdout):
|
||
- 以本命锚点(日干、年支、日支、月令、年柱纳音、阴阳男女)查得、目标干支所逢之神煞;
|
||
- 目标干支自身所属之日柱固定组(阴差阳错、十灵日、魁罡、十恶大败、天赦,供流日参看)。
|
||
查法口径与排盘输出 `## 神煞` 一致(chart/shensha.py,规则见 rules/94_神煞细节.md)。
|
||
|
||
退出码:0 成功;2 输入不可用;3 内部错误。
|
||
"""
|
||
import argparse
|
||
import sys
|
||
import traceback
|
||
from pathlib import Path
|
||
|
||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||
|
||
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
|
||
|
||
|
||
def main() -> int:
|
||
ap = argparse.ArgumentParser(
|
||
prog="query_shensha.py",
|
||
description="查询某一干支(流年/流月/大运/流日)相对本命四柱所逢的神煞",
|
||
)
|
||
ap.add_argument("--gender", required=True, choices=["男", "女"], help="性别")
|
||
ap.add_argument("--pillars", required=True,
|
||
help='本命四柱干支,年月日时顺序,空格分隔,如 "丁亥 乙巳 庚子 辛巳"')
|
||
ap.add_argument("--target", required=True,
|
||
help="目标干支(流年/流月/大运/流日),如 丙午")
|
||
ap.add_argument("--label", default="", help='目标说明,如 "2026 流年",仅用于输出标题')
|
||
a = ap.parse_args()
|
||
|
||
try:
|
||
from chart.shensha import evaluate_target, GAN, ZHI
|
||
|
||
parts = a.pillars.split()
|
||
if len(parts) != 4 or any(len(p) != 2 or p[0] not in GAN or p[1] not in ZHI
|
||
for p in parts):
|
||
print("ERROR: --pillars 应为年月日时四组干支,如 \"丁亥 乙巳 庚子 辛巳\"。",
|
||
file=sys.stderr)
|
||
return 2
|
||
target = a.target.strip()
|
||
if len(target) != 2 or target[0] not in GAN or target[1] not in ZHI:
|
||
print("ERROR: --target 应为一组干支,如 丙午。", file=sys.stderr)
|
||
return 2
|
||
|
||
pillars = dict(zip(("year", "month", "day", "hour"), parts))
|
||
result = evaluate_target(pillars, a.gender, target)
|
||
|
||
title = f"# 神煞查询:{target}"
|
||
if a.label:
|
||
title += f"({a.label})"
|
||
title += f" 对 {' / '.join(parts)}({a.gender})"
|
||
print(title)
|
||
print()
|
||
print("## 本命锚点查得(岁运逢)")
|
||
print()
|
||
if result["anchored"]:
|
||
for star, note in result["anchored"]:
|
||
print(f"- {star}({note})")
|
||
else:
|
||
print("- (无)")
|
||
print()
|
||
print("## 目标干支自身所属")
|
||
print()
|
||
if result["own"]:
|
||
for star, note in result["own"]:
|
||
print(f"- {star}({note})")
|
||
else:
|
||
print("- (无)")
|
||
return 0
|
||
except Exception:
|
||
print("ERROR: 查询内部错误。", file=sys.stderr)
|
||
traceback.print_exc(file=sys.stderr)
|
||
return 3
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|