Antarius
Дек. 12, 2016 20:45:49
Снова вопросы…
Переписал программу на PIL, воспользовался примером, создал index.html с js скриптом, который показывает картинку, нарисованную на питоне с помощью PIL, перезагружая файл каждые 60 сек. Результат полностью удовлетворил, кроме скорости обновления изображения браузером. Ну и ладно.
Вопрос - а если в момент сохранения картинки из питона, веб браузер попытается открыть картинку, что получится?
Аналогично, если питоновская программа опрашивает датчики и записывает результаты в файл (файл открыт на добавление, чтобы велся бесконечный лог), а другая питоновская программа хочет открыть этот файл и нарисовать график в PIL, или js скрипт, рисует график по данным из этого файла, и происходит это одновременно - что будет?
Если файл будет кому-то недоступен, то как этого избежать?
Спасибо
doza_and
Дек. 13, 2016 06:29:50
При открытии на чтение ошибки не будет. В общем случае упадет принимаюшая сторона по причине битых данных (недописанной картинки например).В вашем случае это маловероятно. Избегают этого применяя обмен через сокеты, или залочивая файл на время его записи (создать другой файл -индикатор не валидности первого и поллить систему на его отсутствие).
Поздравляю вы подошли к прелестям асинхронного программирования :)
vic57
Дек. 13, 2016 23:15:57
Antarius
создал index.html с js скриптом, который показывает картинку, нарисованную на питоне с помощью PIL
JS не нужен если передаешь картинку целиком, смысл в том чтобы передать данные - список (Y) и нарисовать браузером, покажи-ка код
Antarius
рисует график по данным из этого файла, и происходит это одновременно - что будет?
отследить изменение файла можно через tail -f
допустим какой-то процесс дописывает строку в data.txt
#
#!/usr/bin/env python
import subprocess
pipe = subprocess.Popen(['tail','-1','-f','data.txt'],stdout=subprocess.PIPE)
while True:
line = pipe.stdout.readline()
pipe.stdout.flush()
if not line: break
# тут чего-то делаешь с данными
print 'pipe:' + line,
print 'break'
Antarius
Дек. 14, 2016 13:27:26
vic57
JS не нужен
Да, я оговорился, просто вставляется картинка в index.html. Без js. Но с автообновлением.
Можете объяснить что тут делается:
line = pipe.stdout.readline()
pipe.stdout.flush()
А можно отслеживать изменения нескольких файлов в одной программе? Хочу опрашивать несколько датчиков и складывать лог в разные файлы. Затем отдельной программой отслеживать измнения и рисовать картинки с графиками. Или отдельная программа для отдельного файла?
Спасибо.
Antarius
Дек. 14, 2016 16:18:50
vic57
отследить изменение файла можно через tail -f
Скопипастил, не работает… разобраться не могу.
Сразу ‘break’.
vic57
Дек. 14, 2016 17:13:28
Antarius
Хочу опрашивать несколько датчиков и складывать лог в разные файлы
я бы опрашивал все датчики в одном цикле и общий лог делал.
ЗЫ там же можно и картинку рисовать
если ты делаешь метеостанцию - решений полно в инете
http://www.avislab.com/blog/raspberry-pi-meteo_ru/первое из найденных