2016-06-29 18 views
1

コマンドの結果をcsvファイルに保存します。 は、私はしばらくの間、このコードを持っている:コマンドのデータをPythonのcsvファイルに保存する

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

を得ている:popen3()引数2が 'T' または私のように「b''でなければなりませんか? –

+0

コンパイル時に 'r'が受け入れられました。私はPython 2.7.9を使用しています。これはあなたがこれを持っている理由です。コマンドのすべてのデータが印刷されています。 – Thibzy

答えて

2

バッファされた内容をファイルにフラッシュするための呼び出しを追加します。これは、呼び出しを使用することによって達成される:csvfile.flush()あなたは `とValueError

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

関連する問題