0

I have a python script and a PHP page on my website. I have to create a csv file and write the data onto it in following manner-

PHP processes the GET requests and calls the python script by shell_exec, passing the GET variables into it, is JSON format. The script here looks like-

...
$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;
...

This script is quite straight forward, which does simply collects the GET variables and forms JSON object of it. Now this data is passed to process_data.py, which processes the data and saves the data into a csv file, the code for which is-

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)

All the things are working well. The data is processed and saved. The PHP script also saves the current data into database. So PHP does two operations- 1. Saves the data into database 2. Pass the data to python script which saves the data into CSV file.

However, the GET data is coming at regular time-interval(say 1 or 2 seconds). So, the call to Python file gets regular for these intervals. It will have to open the CSV file every 1-2 seconds, write the data there. This will slow down the processing.

I want the CSV file to remain open till the data is coming, and close it when the GET request is not made for a long time. Is there any way to do so?

4

0 回答 0