我的网站上有一个python脚本和一个PHP页面。我必须创建一个csv文件并以下列方式将数据写入其中 -
PHP处理GET
请求并通过shell_exec
调用python脚本,将GET
变量传递给它,是JSON格式。这里的脚本看起来像 -
...
$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
,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)
处理数据并将数据保存到csv文件中,其代码为 -
GET
所有事情都运作良好。处理并保存数据。 PHP脚本还将当前数据保存到数据库中。所以PHP做两个操作 - 1.将数据保存到数据库中 2.将数据传递给python脚本,将脚本文件保存为CSV文件。
然而,GET
数据是以规则的时间间隔(比如1或2秒)发送的。因此,对这些间隔的Python文件调用是常规的。它必须每1-2秒打开一次CSV文件,然后在那里写入数据。这会减慢处理速度。
我希望CSV文件在数据到来之前保持打开状态,并在长时间未发出{{1}}请求时关闭它。有没有办法这样做?