サーバ側で外部プログラムの実行

3年前に買った「みんなのPython Webアプリ編」を再読する。それから実習。CGIHTTPServerライブラリを使って、pythonプログラムをWebサーバで実行する練習から。
pythonプログラムの実行というより、python以外の外部プログラムをpythonコードから実行するような状況を想定してやってみる。
下記のtest.pyをcgi-binディレクトリに保存しておいて、ブラウザでhttp://localhost:8000/cgi-bin/test.pyを開く。ここで実行しているのは、pythonプログラムなのだけど、その中ではsubprocessモジュールで外部プログラム(この場合にはunameコマンドだけど、ここを変えれば任意のプログラムが実行できるはず)を起動している。

#!/usr/bin/env python

import subprocess

p = subprocess.Popen(['uname -a'],shell=True,
                     stdin=subprocess.PIPE,stdout=subprocess.PIPE,
                     close_fds=True)
out = p.stdout.readline()

print "Content-type: text/html\n"
print "<html><body>\n"
print out
print "</body></html>"

subprocessモジュールの引数の与え方の参考文献:http://d.hatena.ne.jp/kinneko/20080509/p8
ちゃんとunameの結果がブラウザに表示できた。つまり、サーバ側でプログラムを実行して、その結果を受け取ることができるようになったということだ。ものすごく基本的なことだが、自分でできるとうれしい。

みんなのPython Webアプリ編 [みんなのシリーズ]
みんなのPython Webアプリ編 [みんなのシリーズ]柴田 淳

おすすめ平均
starsPython による特殊なツールをつかった Web アプリ開発
stars実は結構良書!
starsしなやかに学べるWeb開発のABC
stars数少ないPython図書の1つ
stars内容は入門〜入門まで。

Amazonで詳しく見る
by G-Tools