Pythonで対話的にスクリプトを走らせる

Python 3.X でスクリプトを対話的に走らせる方法を二つ、以下に記述します。

1つ目は以下のようにファイル名の指定の前に “-i” をつける方法です。これにより、任意のファイルの実行後に対話モードが開始されます。

python -i hoge.py

2つ目のほうが汎用性が高いかもしれません。対話モード中に(限らず)、

exec(open("./hoge.py").read())

で任意のファイルを実行できます。 以上、二つの方法で任意のファイルを対話的に実行することができました。

以下は蛇足ですが、結局 exec() 関数とは何だったのか、という点を補足します。 exec()関数が実際にやっていることは、ドキュメントに以下のように記述されています。(object といきなり出ていますが、第一引数のことです。後述しますが、本来は第三引数まであります。)

object は文字列かコードオブジェクトでなければなりません。文字列なら、その文字列は一連の Python 文として解析され、そして (構文エラーが生じない限り) 実行されます。 [1] コードオブジェクトなら、それは単純に実行されます。

したがって、exec() 内で open() で py ファイルをテキストファイルとして開き、read() メソッドで読み込むことで、文字列として判定され、Python文として解析され、実行されるようです。

なお下に示すように、元々の引数は第三まであるのですが、詳細は今後に譲りたいと思います。

exec(object[, globals[, locals]])

TensorFlow の仮想環境を Linux で用意して勉強会などに参加しているのですが、どうも IDE の Spyder で import tensorflow as tf が通らないので、どうにか最近勉強している vim でコードを書いて、それを対話モードで実行していけないかと考えた次第です。かじり始めた頃、よく「Python の中で Python 実行ってできるのかなぁ」と考えていたのですが、できるようでした。ドキュメントをしっかり読もう、という教訓にします。