subprocessモジュールの標準出力をファイルへ書き出す
Pythonからシェルコマンドをたたくなら、サブプロセス管理の subprocess モジュールを使うことが推奨されているようです。今回は、走らせたコマンドの標準出力をファイルへ書き出します。コマンドには、UNIXコマンドだけではなく環境変数(PATH)として登録されたコマンド(例えば、 tree や gmt )も使えるようにします。以下で扱うモジュールは、すべてPython標準ライブラリに含まれています。
- ターミナル上で入力するコマンドをそのままPythonで処理
コマンドをshlexで単純なリストに成形してsubprocessへ渡す
>>> import shlex
>>> shlex.split('ls -a')
['ls', '-a']
>>> shlex.split('gmt --version')
['gmt', '--version']
>>> shlex.split('wkpdf --source http://www.apple.com --output apple.pdf')
['wkpdf', '--source', 'http://www.apple.com', '--output', 'apple.pdf']
- 環境変数を引き継いで、ターミナル上で走るコマンドはすべてPythonで処理
環境変数をos.environとしてsubprocessへ渡す
subprocess.Popen(..., env=os.environ, ...)
- 標準出力はファイルオブジェクトで受け取る
with構文にします
output_file = 'sample.txt'
with open(output_file, 'w') as f:
subprocess.Popen(..., stdout=f, ...)
以上をまとめて、こんな感じになりました。
コード
$ python --version
Python 2.7.3 -- 64-bit
proc.communicate() を使うことで、データ量が多い場合に対応しています。