カテゴリ
タグ
Agent Mode Astro Auto Approve CLI Codex Copilot CUDA Cursor FAQPage Gemini git GitHub GitHub Copilot Google Google Search Console Linux Mac NoAdapterInstalled Node.js nvm OpenAI params PowerShell props Python SEO SSH SSH config ssh-copy-id 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/
