__main__.py — CLI 層

argparse 解析 → 組 StreamInfo 提示 → 建 MarkItDown → 轉換 → 輸出
檔案:packages/markitdown/src/markitdown/__main__.py(281 行)· 由 pyproject [project.scripts] markitdown = "markitdown.__main__:main" 掛載

大方向

CLI 是 MarkItDown 類別的薄殼:解析旗標 → 把 -x/-m/-c 轉成 StreamInfo 提示 → 依雲端旗標選 docintel/cu/內建 建實例 → 轉換 → 寫檔或印 stdout。 沒有獨立的轉換邏輯——所有格式知識都在核心。


1. main()

main() 入口建 parser、parse_args、組 StreamInfo 提示、分派轉換。

依序:

  • usage 字串dedent 寫成 SYNTAX/EXAMPLE 教學式說明。
  • -x / -m / -c 正規化:副檔名自動補 .、mimetype 必須含 /、 charset 用 codecs.lookup 驗證,非法即 _exit_with_error
  • 三個旗標任一存在就組 StreamInfo 提示。
  • --list-plugins 印出 entry-point 清單後 sys.exit(0)
  • 雲端互斥-d-e--use-cu--cu-endpoint--cu-file-types 解析成 ContentUnderstandingFileType 列舉。
  • 無 filename → 讀 sys.stdin.bufferconvert_stream);有 → convert

2. 輸出與錯誤

_handle_output(args, result) 工具寫檔(UTF-8)或安全地印到 stdout。

-o 就開檔寫 result.markdown;否則印 stdout 時用 encode(errors="replace").decode() 避免 Windows 終端編碼炸掉。

_exit_with_error(message) 工具印訊息並以 exit code 1 離開。

CLI 參數錯誤(缺端點、mimetype 格式錯、charset 未知)的統一出口。