Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: NikolaiTalev в May 17, 2014, 08:30



Титла: Запис на файл във цикъла (не селед изпълнението му) Python
Публикувано от: NikolaiTalev в May 17, 2014, 08:30
Код:
#!/usr/bin/env python

# import the serial module so we can access the serial port
import serial
import time
# set up serial port
serialPort0 = serial.Serial('/dev/ttyACM3', 57600)

# open file object in write mode
dataFile = open('data.dat', 'w')
 
# get number of samples to take
# don't prompt user --> piped in from bash script
numberSamples = 30

# get specified number of samples

print 'conected'



for i in range(numberSamples+1):
 

  reading0 = serialPort0.readline()
 
  dataFile.writelines(str(i) + ' ' + str(reading0)) # write sample number and reading to the file
 
  print i ,reading0 # output sample number to screen
 
# close file object, good practice
dataFile.close()

# close serial port to free it for other applications
serialPort0.close()


Идеята на този скрипт е да записва данни във файл които после да чертая с gnuplot но проблема е, че записва стойностите след края на цикъла for а на мен ми трябва стойност запис стойност запис ...
за да мога да гледам графиката в реално време. Със питон до сега съм се сблъсквал само един път едно скрипче за 3g трафик и ми е много тъмна индия.


Титла: Re: Запис на файл във цикъла (не селед изпълнението му) Python
Публикувано от: bvbfan в May 17, 2014, 09:01
Има няколко варианта dataFile.flush() след линията dataFile.writelines(...) или да направиш файла да не  се буферира още при отварянето dataFile = open('data.dat', 'w', 0) или да се буферира на линия dataFile = open('data.dat', 'w', 1). Ако покажеше как ползваш gnuplot-a, не съм видял може да има питон байдване, може да се мине и без писане във файл, а направо да си комуникират.


Титла: Re: Запис на файл във цикъла (не селед изпълнението му) Python НОВО
Публикувано от: NikolaiTalev в May 19, 2014, 10:41
Има няколко варианта dataFile.flush() след линията dataFile.writelines(...) или да направиш файла да не  се буферира още при отварянето dataFile = open('data.dat', 'w', 0) или да се буферира на линия dataFile = open('data.dat', 'w', 1). Ако покажеше как ползваш gnuplot-a, не съм видял може да има питон байдване, може да се мине и без писане във файл, а направо да си комуникират.

Мерси  :)  dataFile = open('data.dat', 'w', 0) свърши работа. Без писане във файл става или поне трябва да може но не знам как да го направя с gnuplot.py ($2).
За сега съм пробвал само демотата след като го инсталирах.
В момента ползвам gnuplot така:

Код:
#!/bin/bash
echo "start" > /dev/ttyACM3
echo "Sampling..."
sleep 2;

gnuplot -persist -e "set xlabel 'време, sec';
set xrange [0:*];

set ylabel 'температура, °C';
set yrange [0:*];

set title 'Определяне на инертността';
set key reverse Left outside;
set grid;
 
set style data line;


plot 'data.dat' using 1:2 title 'Грил'"
#set autoscale;

echo "Done!"

Така ме устройва но ми се иска да направя да може да се задават параметри например numbersamples тъй като и идея си нямам от pyton и GUI си  мислех не може ли да се направи пак с bash и при стратирането да пита брой измервания име на дата файла ....

Моля всеки който има идея или някакво предложение да сподели  :D