Работая над проектом по мониторингу, мне нужно считать импульсы с помощью пульсометров. Я уже нашел некоторые решения, которые пытаюсь адаптировать к своим потребностям.
Вот скрипт Python, работающий на Raspberry Pi:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import datetime
import sys
import signal
from subprocess import check_output
#verbose = True # global variable
############################################################################################################
############################################################################################################
def printusage(progname):
print progname + ' [debug]'
print 'Example usage: '
print progname + ' 23 /path/to/mylogfile'
print progname + ' 23 /path/to/mylogfile debug'
sys.exit(-1)
def signal_handler(signal, frame):
if verbose:
print('You pressed Ctrl+C, so exiting')
GPIO.cleanup()
sys.exit(0)
def readvalue(myworkfile):
try:
f = open(myworkfile, 'ab+') # open for reading. If it does not exist, create it
line=subprocess.check_output(['tail','-f','-1',f])
elmts=line.split(" ")
value = int(elmts[2])
except:
value = 0 # if something went wrong, reset to 0
#print "old value is", value
f.close() # close for reading
return value
def writevalue(myworkfile,value):
f = open(myworkfile, 'a')
f.write((str(datetime.datetime.now())+' '+str(value)+'\r\n')) # timestamp
f.close()
############################################################################################################
############################################################################################################
######### Initialization
#### get input parameters:
try:
mygpiopin = int(sys.argv[1])
logfile = sys.argv[2]
except:
printusage(sys.argv[0])
verbose = False
try:
if sys.argv[3] == 'debug':
verbose = True
print "Verbose is On"
else:
printusage(sys.argv[0])
except:
pass
#### if verbose, print some info to stdout
if verbose:
print "GPIO is " + str(mygpiopin)
print "Logfile is " + logfile
print "Current value is " + str(readvalue(logfile))
#### setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(mygpiopin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
signal.signal(signal.SIGINT, signal_handler) # SIGINT = interrupt by CTRL-C
########## Main Loop
while True:
# wait for pin going up
GPIO.wait_for_edge(mygpiopin, GPIO.RISING)
# read value from file
counter=readvalue(logfile) + 1
if verbose:
print "New value is", counter
# write value to file
writevalue(logfile,counter)
# and wait for pin going down
GPIO.wait_for_edge(mygpiopin, GPIO.FALLING)
############################################################################################################
############################################################################################################
Я хочу зарегистрировать последний индекс и увеличить его, но все, что я тестировал до сих пор, оставляет цикл зависающим на индексе 1.
Я не могу использовать «более тяжелый» метод для поиска последней строки, например, просматривая весь файл, потому что с течением времени он будет становиться все тяжелее и тяжелее, и я не могу пропустить ни одного импульса.
Я новичок в программировании, поэтому спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: файл результатов выглядит следующим образом:
2016-10-08 16:54:23.072469 1
2016-10-08 16:54:23.462465 1
2016-10-08 16:54:23.777977 1
2016-10-08 16:54:24.010045 1
2016-10-08 16:54:24.194032 1
2016-10-08 16:54:24.388120 1
2016-10-08 16:54:24.549389 1
2016-10-08 16:54:24.737994 1
2016-10-08 16:54:24.959462 1
2016-10-08 16:54:25.164638 1
2016-10-08 16:54:25.351850 1
2016-10-08 16:54:25.536655 1
2016-10-08 16:54:25.716214 1
2016-10-08 16:54:25.794152 1
2016-10-08 17:06:13.506531 1
2016-10-08 17:06:14.097642 1
2016-10-08 17:06:14.211579 1
2016-10-08 17:06:15.237852 1
2016-10-08 17:06:15.752239 1
2016-10-08 17:06:16.320419 1
2016-10-08 17:06:16.842906 1
2016-10-08 17:06:17.391121 1
2016-10-08 17:06:17.851521 1
2016-10-08 17:06:18.444486 1
2016-10-08 17:06:18.858358 1
Подробнее здесь: https://stackoverflow.com/questions/399 ... -last-line
Python получает последнюю строку ⇐ Python
Программы на Python
1770220083
Anonymous
Работая над проектом по мониторингу, мне нужно считать импульсы с помощью пульсометров. Я уже нашел некоторые решения, которые пытаюсь адаптировать к своим потребностям.
Вот скрипт Python, работающий на Raspberry Pi:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import datetime
import sys
import signal
from subprocess import check_output
#verbose = True # global variable
############################################################################################################
############################################################################################################
def printusage(progname):
print progname + ' [debug]'
print 'Example usage: '
print progname + ' 23 /path/to/mylogfile'
print progname + ' 23 /path/to/mylogfile debug'
sys.exit(-1)
def signal_handler(signal, frame):
if verbose:
print('You pressed Ctrl+C, so exiting')
GPIO.cleanup()
sys.exit(0)
def readvalue(myworkfile):
try:
f = open(myworkfile, 'ab+') # open for reading. If it does not exist, create it
line=subprocess.check_output(['tail','-f','-1',f])
elmts=line.split(" ")
value = int(elmts[2])
except:
value = 0 # if something went wrong, reset to 0
#print "old value is", value
f.close() # close for reading
return value
def writevalue(myworkfile,value):
f = open(myworkfile, 'a')
f.write((str(datetime.datetime.now())+' '+str(value)+'\r\n')) # timestamp
f.close()
############################################################################################################
############################################################################################################
######### Initialization
#### get input parameters:
try:
mygpiopin = int(sys.argv[1])
logfile = sys.argv[2]
except:
printusage(sys.argv[0])
verbose = False
try:
if sys.argv[3] == 'debug':
verbose = True
print "Verbose is On"
else:
printusage(sys.argv[0])
except:
pass
#### if verbose, print some info to stdout
if verbose:
print "GPIO is " + str(mygpiopin)
print "Logfile is " + logfile
print "Current value is " + str(readvalue(logfile))
#### setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(mygpiopin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
signal.signal(signal.SIGINT, signal_handler) # SIGINT = interrupt by CTRL-C
########## Main Loop
while True:
# wait for pin going up
GPIO.wait_for_edge(mygpiopin, GPIO.RISING)
# read value from file
counter=readvalue(logfile) + 1
if verbose:
print "New value is", counter
# write value to file
writevalue(logfile,counter)
# and wait for pin going down
GPIO.wait_for_edge(mygpiopin, GPIO.FALLING)
############################################################################################################
############################################################################################################
Я хочу зарегистрировать последний индекс и увеличить его, но все, что я тестировал до сих пор, оставляет цикл зависающим на индексе 1.
Я не могу использовать «более тяжелый» метод для поиска последней строки, например, просматривая весь файл, потому что с течением времени он будет становиться все тяжелее и тяжелее, и я не могу пропустить ни одного импульса.
Я новичок в программировании, поэтому спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: файл результатов выглядит следующим образом:
2016-10-08 16:54:23.072469 1
2016-10-08 16:54:23.462465 1
2016-10-08 16:54:23.777977 1
2016-10-08 16:54:24.010045 1
2016-10-08 16:54:24.194032 1
2016-10-08 16:54:24.388120 1
2016-10-08 16:54:24.549389 1
2016-10-08 16:54:24.737994 1
2016-10-08 16:54:24.959462 1
2016-10-08 16:54:25.164638 1
2016-10-08 16:54:25.351850 1
2016-10-08 16:54:25.536655 1
2016-10-08 16:54:25.716214 1
2016-10-08 16:54:25.794152 1
2016-10-08 17:06:13.506531 1
2016-10-08 17:06:14.097642 1
2016-10-08 17:06:14.211579 1
2016-10-08 17:06:15.237852 1
2016-10-08 17:06:15.752239 1
2016-10-08 17:06:16.320419 1
2016-10-08 17:06:16.842906 1
2016-10-08 17:06:17.391121 1
2016-10-08 17:06:17.851521 1
2016-10-08 17:06:18.444486 1
2016-10-08 17:06:18.858358 1
Подробнее здесь: [url]https://stackoverflow.com/questions/39934453/python-getting-last-line[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия