python3 -c コマンド情報まとめ
ターミナルの python3 -c(python3)コマンドについて、基本的な使い方や便利なワンライナーの例、他の実行方法との違い、AI エージェントが実行した場合の危険性を紹介しています。
目次
python3 -cとは
python3 -c は、Pythonのプログラムを別個のファイル(.py)として保存することなく、コマンドライン上で指定した文字列をコードとして直接実行するためのオプションです。-c は「command(コマンド)」を意味しており、簡易的な処理やシステムチェック、他のシェルスクリプトとの連携時などに強力な威力を発揮します。
オプション「-c」の意味と引数のルール
| 書式 | 意味 |
|---|---|
python3 -c "code" | ダブルクォーテーションで囲まれた文字列を Python コードとして解釈・実行します。 |
指定するコード内では、セミコロン(;)を使用することで、改行を使わずに複数の処理を1行(ワンライナー)で記述できます。
また、シェル側の変数展開と競合しないよう、コード全体をシングルクォーテーション(')で囲み、内部でダブルクォーテーション(")を使うといった工夫がよく用いられます。
よく使う組み合わせとワンライナー例
ターミナル上での簡易計算
python3 -c "print(124 * 365)"
電卓を起動することなく、複雑な数値計算やべき乗計算などをターミナル上で瞬時に実行して結果を表示します。
JSONデータの整形(インデント付与)
cat data.json | python3 -c "import sys, json; print(json.dumps(json.load(sys.stdin), indent=4, ensure_ascii=False))"
パイプで受け取った生のJSONデータを綺麗に整形し、日本語がエスケープ(\uXXXX)されない状態で標準出力に表示させます。
ファイルの文字エンコードや特定文字のチェック
python3 -c "import sys; open('app.js', encoding='utf-8').read(); print('OK')"
ファイルが壊れていないか、また特定の文字エンコーディングで正常に開けるかどうかを、短いコードで検証できます。
python3 -c vs python3 -m の違い
コマンドラインからPythonを動かす代表的なオプションとして -m がありますが、以下のような違いがあります。
| 項目 | python3 -c "..." | python3 -m <module> |
|---|---|---|
| 指定するもの | Pythonのソースコードそのもの | インストール済みのライブラリやモジュール名 |
| 主な用途 | 独自の短いロジックの即時実行 | 標準ライブラリ(例: venv, http.server)の起動 |
| 柔軟性 | 高(インポートを含め自由な記述が可能) | 中(モジュールの既存仕様に従う) |
独自のカスタマイズされた処理や、その場限りのデータパースには -c オプションを使用します。
一方で、ローカルサーバーの起動(http.server)や仮想環境の構築(venv)など、既存のモジュールをツールとして使う場合は -m が適しています。
ユースケース
シェルスクリプト内での高度な演算や文字列処理
標準的なシェル(Bashなど)では実装が難しい複雑な浮動小数点数演算や、正規表現による文字列置換を行う際、その部分だけ python3 -c を使ってPythonに処理を委託します。
環境にインストールされているライブラリの動作確認
特定の外部ライブラリ(例: requests や numpy)が正しくインストールされ、動作可能であるかを素早くテストするために、対話モードに入らずに1行でインポート確認を行います。
AIエージェントが実行しようとした場合
AIエージェントの目的
AIエージェントは主に次のような目的で python3 -c を実行しようとすることがあります。
- 作業に必要な外部ライブラリのインストール確認や動作検証を行うため
- ファイルのエンコーディングや括弧の閉じ忘れなどのシンタックスチェックをその場で行うため
- シェルスクリプトではパースしづらいJSONLなどのテキストデータをパースして整理するため
危険性
python3 -c コマンドは、引数として渡すプログラムコードの記述内容によって実行内容が決定されます。
もしAIエージェントが生成したコード内に os.remove() や shutil.rmtree() などの破壊的処理、または無限ループが含まれている場合、システムデータの破損や高負荷を引き起こす危険性があります。
そのため、注意が必要なコマンドであり、AIエージェントが実行する際は渡されるコードの内容が安全なものであるかを十分に精査する必要があります。