Pythonコードをpythonコマンドで実行する(-cオプション)

pythonコマンドの-cオプションについてです。-cオプションを付ければ、ターミナル上でPythonコードをpythonコマンドで実行する事ができます。

※ 本ページはプロモーションが含まれています。

目的と動作環境

最終更新日:2021/7/4

pythonコマンドは-cオプションで、ちょっとしたpythonコードを実行する事ができます(ターミナル上でワンライナーでpythonスクリプトを実行できる)。
ここでは実際にpythonコマンドを実行しながら、-cオプションについて説明しています。

■動作環境やバージョンは以下の通りです。
OS:macOS Big Sur(バージョン11.4)
Pythonバージョン:3.9.0

$ python -V
Python 3.9.0

pythonコマンドを-cオプションを付けて実行する

実際に、pythonコマンドを-cオプションを付けて、適当なpythonコードを実行してみます。

$ python -c 'a = 3 * 3; print(a);'
9
コマンドを複数行で実行してみます。
$ python -c ' \
> a = 3 * 3;
> print(a);
> '
9

これだけならpythonのREPLで(pythonコマンドでpythonシェルに入って)、インタラクティブにpythonのコードを実行すれば良いと思いますが、-cオプションの場合、シェル(bashとか)の他のコマンドも一緒に使えるので、便利な時があります。

REPLはRead-Eval-Print Loopの略称で、対話形式でpythonなどのコードを実行して評価して結果を出力してくれます。
pythonのREPLは、pythonコマンド(環境によってはpython3コマンド)で起動できます。

例えば、pythonコードの実行結果をすぐにgrepに渡したりできます。

$ python -c ' \
> a = [];
> print(dir(a));
> ' | grep append
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

pythonコードを少し試したい場合はpythonシェル上(REPL)で十分だと思いますが、pythonの実行結果を使ってシェルのコマンドで何かをしたい場合、-cオプションを使う機会がありそうです。

強力なREPL環境のIPythonについて

以上簡単でしたが、pythonの-cオプションを使って、pythonコードとシェルコマンドを組み合わせて使う方法について説明してきました。

また、pythonにはIPythonという標準のpythonシェル(REPL)をさらに強化したREPLがあります。IPython上では、強力なコード補完機能などがあるだけでなく、システムコマンド(bashなどのシェルコマンド)の実行もできます。ですので、IPython上で、pythonコードとシェルコマンドを組み合わせて実行する事が可能です。

IPythonについては別ページで説明していますので、興味のある方は参考にしてください。
IPythonをインストールして使ってみる

また、標準のPythonシェル(REPL)上でシェルコマンドを実行したい場合、osモジュールやsubprocessモジュールを使うなどいくつかの方法があります。

それについても別ページで説明していますので、よろしければそちらを参考にしてください。
PythonのREPL上でシステムコマンドを実行する方法