(73) WEBブラウザ経由でPythonスクリプトを実行

投稿者: | 2016年10月25日

23,766 views

この記事は最終更新から 1350日 が経過しています。

Pythonの高機能且つ高速な処理をWEBアプリで使用できればとっても心強い。
今回はWEBブラウザ経由(PHPページ経由)でPythonを使用してみる。

1. 仕様

[Client側] パソコン上でCSVファイルを作成し、n行m列の数値データを書いておく。
[Client側] WEBブラウザで計算種別を合計値、平均値、最大値、最小値の中から選択する。
[Client側] WEBブラウザでCSVファイルをアップロードする。
[Server側] CSVファイルと計算種別を受け取る。
[Server側] PythonスクリプトにCSVファイルと計算種別を渡して実行する。
[Server側] Pythonから計算結果を受け取りHTMLにして出力する。
[Client側] 受け取ったHTMLを表示する。

2. プログラム作成

index.php

<!DOCTYPE html>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
<TITLE>サンプル</TITLE>
</HEAD>
</BODY>

<?php
  $cmd = (isset($_POST['cmd']))? $_POST['cmd'] : 0;
  if($cmd > 0){
    if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
      move_uploaded_file($_FILES['upfile']['tmp_name'], 'tmp.csv');
      exec("python csv_calc.py tmp.csv $cmd", $resp, $code);
      echo $resp[0];
      unlink('tmp.csv');
    }
  }
?>

<hr />
<form enctype="multipart/form-data" action="./" method=post>
<input type="file" name="upfile"><br />
<select name="cmd">
  <option value="1">合計値</option>
  <option value="2">平均値</option>
  <option value="3">最大値</option>
  <option value="4">最小値</option>
</select>
<input type="submit" value="計算実行">
</form>

</BODY>
</HTML>

csv_calc.py (Pythonスクリプトファイル)

import sys
import numpy as np

#---------------------------------
def calc_csv( fpath_csv, cmd ):
    data = np.loadtxt( fpath_csv, delimiter=',' )
    if cmd == 1:
        ret = data.sum()
    elif cmd == 2:
        ret = data.mean()
    elif cmd == 3:
        ret = data.max()
    elif cmd == 4:
        ret = data.min()
    else:
        print "invalid command"
        ret = 0
    return ret

#---------------------------------
# argv[1] : file path
# argv[2] : command 1:sum, 2:average, 3:max, 4:min
if __name__ == '__main__':
    ary_argv = sys.argv
    fpath = ary_argv[1]
    cmd   = int(ary_argv[2])
    print calc_csv( fpath, cmd )

3. 参考

次の投稿 (74) WEBブラウザ経由でPythonスクリプトを実行#2 では、indexページ自体を Pythonで書く方法について記している。そちらを先に投稿すべきだったか…


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です