2016-06-29 2 views
1

Я хочу сохранить результат команды в файле csv. У меня этот код на данный момент:сохранить данные из команды в файл csv в python

import sys 
import os 
import time 
import datetime 
import subprocess 
import csv 

with open("compteur_data.csv","a") as csvfile: 
      date = datetime.datetime.today() 
      wtr=csv.writer(csvfile) 
      wtr.writerow(['Date/Heure','DATA']) #pillar title 
      while True: 
       ts = time.time() 
       st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') 
       print '..............................', st 
       sys.stdout.flush() 
       cmd = 'sdm120c -a 1 -b 2400 -P N -S 2 -j 20 -z 1 /dev/ttyUSB0' 
       (c_stdin,c_stdout,c_stderr)=os.popen3(cmd,'r') 
       out=c_stdout.read() 
       print out 
       c_stdin.close() 
       c_stdout.close() 
       c_stderr.close() 

       wtr.writerow([date,out]) 
       time.sleep(5) 

Моя цель состоит в том, чтобы собрать данные из sdm120c, затем сохраните данные в файле CSV. На моей оболочке python я могу видеть все данные, которые я хочу сохранять каждые 5 секунд, но когда я открываю целевой файл csv, ничего не записывается. Возможно, кто-нибудь спросит меня, где моя ошибка? Пожалуйста .

+0

вы получаете 'ValueError: popen3() аргумент 2 должен быть 'T' или«b'', как я? –

+0

У меня нет ошибки при компиляции. 'R' был принят. Я на python 2.7.9, возможно, поэтому у вас есть это ... и все данные моей команды были напечатаны. – Thibzy

ответ

2

Добавьте вызов для сброса буферизованного содержимого в файл. Это достигается с помощью вызова: csvfile.flush()

with open("compteur_data.csv","a") as csvfile: 
    date = datetime.datetime.today() 
    wtr=csv.writer(csvfile) 
    wtr.writerow(['Date/Heure','DATA']) #pillar title 
    while True: 
     ts = time.time() 
     st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') 
     print '..............................', st 
     sys.stdout.flush() 
     cmd = 'sdm120c -a 1 -b 2400 -P N -S 2 -j 20 -z 1 /dev/ttyUSB0' 
     (c_stdin,c_stdout,c_stderr)=os.popen3(cmd,'r') 
     out=c_stdout.read() 
     print out 
     c_stdin.close() 
     c_stdout.close() 
     c_stderr.close() 

     wtr.writerow([date,out]) 

     #New call to flush added below 
     csvfile.flush() 

     time.sleep(5) 
+1

Спасибо за помощь! действительно ! теперь я вижу значение в моем файле csv !! – Thibzy

Смежные вопросы