Web サイトに Python スクリプトと PHP ページがあります。次の方法でcsvファイルを作成し、データを書き込む必要があります-
PHP はリクエストを処理し、変数を渡してGET
Python スクリプトを呼び出します。これは JSON 形式です。ここのスクリプトは次のようになります-shell_exec
GET
...
$var_a = $_GET['a'];
$var_b = $_GET['b'];
$var_c = $_GET['c'];
$post_data = array('item' => 'get-list',
'var a' => "$var_a",
'var b' => "$var_b",
'var c' => "$var_c"
);
$json_data = json_encode($post_data);
$temp = shell_exec('python process_data.py "' . $json_data .'"');
echo $temp;
...
このスクリプトは非常に単純で、GET
変数を収集してそのJSON
オブジェクトを形成するだけです。このデータは に渡されprocess_data.py
、データが処理され、データが csv ファイルに保存されます。コードは次のとおりです。
import sys, json, time, csv
json_data = json.dumps(sys.argv[1])
def scr(json_data):
json_data = json_data
count = 0
json_list = json_data.split(',')
for i in json_list:
count=count+1
if(count==5):
lati = json_list[0].strip('{')
longi = json_list[1]
datestmp = json_list[2]
timestmp = json_list[3]
out = open('file.csv', 'w')
out.write('%s;' % lati.split(':')[1])
out.write('\n')
out.write('%s;' % longi.split(':')[1])
out.write('\n')
out.write('%s;' % datestmp.split(':')[1])
out.write('\n')
out.write('%s;' % timestmp.split(':',1)[1])
out.write('\n')
out.close()
print 'Latitude: ',lati.split(':')[1],', Longitude: ',longi.split(':')[1],', Datestamp: ',datestmp.split(':')[1],', Time: ', timestmp.split(':',1)[1]
else:
print 'Wrong data received'
scr(json_data)
すべてがうまくいっています。データが処理され、保存されます。PHP スクリプトは、現在のデータもデータベースに保存します。したがって、PHP は 2 つの操作を行います。1. データをデータベースに保存します。2. データを Python スクリプトに渡し、データを CSV ファイルに保存します。
ただし、GET
データは定期的な時間間隔 (たとえば 1 秒または 2 秒) で送信されます。したがって、Python ファイルへの呼び出しは、これらの間隔で定期的に行われます。1 ~ 2 秒ごとに CSV ファイルを開き、そこにデータを書き込む必要があります。これにより、処理が遅くなります。
データが来るまでCSVファイルを開いたままにしGET
て、長時間リクエストが行われなかったときに閉じるようにしたい。そうする方法はありますか?