Serielle Schnittstelle auslesen und in Datei kopieren
Verfasst: Montag 24. Juli 2006, 14:08
Hallo,
ich möchte an einem Rechner die serielle Schnittstelle auslesen. Ziel ist es, Daten, die über eine serielle Schnittstelle an einen Drucker gesendet werden, mitzuschneiden und in eine Datei zu schreiben. Soweit ist das Ganze ja auch kein Problem, mit Pyserial die Schnittstelle auslesen, und mit write den Inhalt in eine Datei wegschreiben. Nun soll aber der Dateiinhalt einmal täglich, oder wöchentlich auf eine Diskette weggeschrieben werden und das Ganze möglichst ohne Interaktion durch den Benutzer, dessen Tätigkeit sich ausschließlich auf das Einlegen und Entnehmen der Diskette beschränken soll.
Mein erster Versuch sieht so aus:
In diesem Fall würde die Datei "Auswertung" dann per Cronjob auf die Diskette kopiert und danach gelöscht werden - kann man aber natürlich auch innerhalb von Python erledigen. Was mir allerdings überhaupt nicht gefällt, ist dieses Konstrukt mit der Endlosschleife und die Tatsache, dass jedes mal wieder abgefragt wird, ob schon der 6. Wochentag ist.
Ich wurschtel mich erst gerade so in die Programmierung mit Python rein, von daher ist der Ansatz sicherlich alles andere als perfekt. Hat jemand von Euch eine Anregung, wie ich das Ganze eleganter lösen könnte? Es ist ja theoretisch so, dass permanent Daten über die serielle Schnittstelle kommen könnten, also müsste eigentlich die Schnittstelle dauernd ohne Timeout ausgelesen werden. Dann habe ich allerdings das Problem, dass das Programm in dieser Abfrage festhängt und die Wochentags- bzw. Uhrzeitabfrage nicht mehr erfolgen kann.
Gruss, Dirk
ich möchte an einem Rechner die serielle Schnittstelle auslesen. Ziel ist es, Daten, die über eine serielle Schnittstelle an einen Drucker gesendet werden, mitzuschneiden und in eine Datei zu schreiben. Soweit ist das Ganze ja auch kein Problem, mit Pyserial die Schnittstelle auslesen, und mit write den Inhalt in eine Datei wegschreiben. Nun soll aber der Dateiinhalt einmal täglich, oder wöchentlich auf eine Diskette weggeschrieben werden und das Ganze möglichst ohne Interaktion durch den Benutzer, dessen Tätigkeit sich ausschließlich auf das Einlegen und Entnehmen der Diskette beschränken soll.
Mein erster Versuch sieht so aus:
Code: Alles auswählen
#! /usr/local/bin/python
import serial
import os
from time import *
ser = serial.Serial(port=0, timeout=10)
protocol=open('/logfile/serlog', 'a')
while ser.isOpen():
line = ser.readline()
protocol.write(line)
zeit = localtime()
tag = zeit[6]
if tag == 6 and wochenflag == 0:
wochenflag = 1
protocol.close()
rename('/root/serlog', 'auswertung')
protocol=open('/root/serlog', 'a')
if tag < 6:
wochenflag = 0
Ich wurschtel mich erst gerade so in die Programmierung mit Python rein, von daher ist der Ansatz sicherlich alles andere als perfekt. Hat jemand von Euch eine Anregung, wie ich das Ganze eleganter lösen könnte? Es ist ja theoretisch so, dass permanent Daten über die serielle Schnittstelle kommen könnten, also müsste eigentlich die Schnittstelle dauernd ohne Timeout ausgelesen werden. Dann habe ich allerdings das Problem, dass das Programm in dieser Abfrage festhängt und die Wochentags- bzw. Uhrzeitabfrage nicht mehr erfolgen kann.
Gruss, Dirk