カテゴリ
タグ
Agent Mode Astro Auto Approve changelog Chat clear CLI Code Actions Codex compact context Copilot copy Ctrl+S CUDA Cursor delegate diff experimental FAQPage Gemini git GitHub GitHub Copilot Google Google Search Console init Linux Mac model NES NoAdapterInstalled Node.js nvm OpenAI params plan PowerShell prompt props Python research rewind SEO share Shift+Tab SSH SSH config ssh-copy-id streamer-mode undo usage Visual Studio VS Code VS2026 Windows WSL アップデート インストール エディター エラー対応 エラー解決 コンテキスト コンポーネント設計 シェル実行 ショートカット プチキャンプ メンション モード切替 リダイレクト リネーム 一覧 公開鍵認証 動的ルーティング 天体観測 奈良県 学生 岩手県 市ケ原 日帰り旅行 日本語 明けの明星 曽爾高原 構造化データ 流星群 温泉 神戸ハイキング 自動化 自動承認 設定 設定方法 静的サイト
464 文字
2 分
GitHub Copilot CLI を Python subprocess から呼んでみた【Windows】
はじめに
Pythonから自動でGitHub Copilot CLIを呼び出したくて、subprocess経由で実行しようとしたところ、なぜか失敗しました。
調べてみると、これはCopilot CLI固有の問題というより、Windows + PowerShell + CLI自動実行でよくある落とし穴だったので、備忘録として共有します。
何が起きたか
subprocess.run()でCopilot CLIを呼び出そうとすると、以下のような問題に遭遇しました。
- クォート/エスケープが壊れる(
"、改行、記号を含むpromptで特に発生) - コマンドが長くなりすぎる(長いprompt・長いパスで
WinError 206が出ることも) - CLIが対話前提で止まってしまう
注意点:--add-dirを付けないとファイル編集できない
Copilotにファイル編集や出力をさせたい場合、実行時に対象ディレクトリを明示する必要があります。これを忘れると、Copilot側が参照・編集できる範囲に入らず失敗します。
--add-dir "<prompt_dir>"
--add-dir "<out_dir>"解決策1:PowerShell経由で呼ぶ
PowerShellの-Commandにまとめると動きやすいです。 私はこれで動きました。
cmd_str = f'powershell.exe -Command "copilot -p \\\"{escaped_prompt}\\\" --model {model} --allow-all-tools --add-dir \\\"{prompt_dir}\\\" --add-dir \\\"{out_dir}\\\""'解決策2(おすすめ):promptを引数で渡す
長いコマンドで事故を防ぐには、promptを-Command内に直埋めせずPowerShellのparam経由で引数として渡すのがおすすめです。
import subprocess
ps = r'param($p,$m,$pd,$od) copilot -p $p --model $m --allow-all-tools --add-dir $pd --add-dir $od'
subprocess.run(
["powershell.exe", "-NoProfile", "-NonInteractive", "-Command", ps,
"--", prompt, model, prompt_dir, out_dir],
text=True,
capture_output=True,
)最後に
PythonからGitHub Copilot CLIを呼んで自動化しようと企んできたのですが、思ったより面倒でした。 どなたかの参考になれば幸いです。
GitHub Copilot CLI を Python subprocess から呼んでみた【Windows】
https://naonao-na.com/posts/githubcopilotcli-call-from-subprocess/
