Beiträge von noisefloor

    Hallo,

    villamarinella: dein Ansatz hat IMHO mehrere Fehler.

    1. willst du das Skript eigentlich gar nicht in einer Endlosschleife laufen lassen - dann ist es nämlich 99,9% der Zeit mit nichts tun beschäftigt. Wenn du es periodisch brauchst, dann rufe es periodisch auf, z.B. über eine systemd Timer Unit.
    2. besteht für die absolut keine Notwendigkeit, den gesamten Inhalt der Datei im Speicher zu halten - weil dich ja nur eine (kleiner) Teil der Daten interessiert.

    Hier mal ein schnell zusammengehaktes Python 3 Skript (läuft unter Python 3.4), was eine Datei liest und sich die letzte Zeilenanzahl merkt. Wird es nochmal aufgerufen, werden nur Zeilen ausgegeben, die dazu gekommen sind:

    [code=php]import dbm
    from itertools import islice
    from sys import maxsize

    with dbm.open('linecount.dbm', 'c') as db:
    try:
    linecount = int(db['linecount'])
    except KeyError:
    linecount = 0
    db['linecount'] = str(linecount)
    with open('dokument.txt', 'r') as f:
    counter = ''
    for counter, line in enumerate(islice(f, linecount, maxsize, 1)):
    print(line)
    if counter != '':
    linecount = linecount+counter+1
    db['linecount'] = str(linecount)[/php]

    Im Prinzip selbsterklärend - spätestens dann, wenn man die Doku zu dbm und islice gelesen hat.

    3. wird auch dieses Skript irgendwann versagen, weil die Apache Logdateien dem logrotate unterliegen, d.h. irgendwann wird die aktuelle Logdatei archiviert und eine neue angelegt. Dann funktioniert die Zeilenzählung nicht mehr.

    Gruß, noisefloor

    Hallo,

    Zitat

    hat jemand eine Idee, wie man es hinkriegt, dass nach dem Starten des Raspberry Pi automatisch der Terminal geöffnet wird und ein gewünschter Befehl ausgeführt wird?


    Mit einer systemd Service Unit. Und bevor du fragst: dazu gibt es bergeweise Beispiele im Netz.

    Wobei das, genau wie crontab, das Programm _nicht_ in einem interaktiven Terminal ausführt. Ist ja auch nicht Sinn der Sache, dass sich magisch irgendwelche Fenster öffnen in den irgendwas ausgeführt wird. Was ist den der tiefere Sinn, dass du einen geöffneten Terminal sehen möchtest?

    Gruß, noisefloor

    Hallo,

    Zitat

    Wie kann ich nun verhindern das ich eine 1 GB Datei so einzulesen


    In dem du den Befehl nicht ausführst :D

    Oder, sinnvoller, vorher die Dateigröße checken, wie dunklesToast schon gezeigt hast.

    Zitat

    bzw. was würde dann pasieren?


    IMHO bekommst du eine OutOfMemory Exception oder der Linux-Kernel schießt den Prozess irgendwann ab (hatte selber noch nie so eine große Datei).

    Frage: _Musst_ du die Daten komplett im Speicher haben? Wenn ja, warum? Ansonsten kannst du ja auch zeilenweise für die Datei iterieren.

    Gruß, noisefloor

    Hallo,

    Zitat

    Es ist mir zum Beispiel nicht gelungen für die Zeile from PIL import ImgageTk eine Lösung zu finden.


    AFAIK ist das in den älteren Versionen von pillow nicht drin...

    Kannst du aber leicht prüfen, in dem du eine Python-Shell öffnest und folgendes eingibst:

    [code=php]>>> import PIL
    >>> help(PIL)[/php]

    Dann bekommst du u.a. eine Liste "Package Contents", in der alle enthaltenen Module aufgelistet sind. ist darin `ImageTk` nicht enthalten, kannst du es natürlich auch nicht importieren.

    Zitat

    Naja, es hat aber auch einiges gebracht. Schau mal was ich so alles fabriziert habe:


    Dazu könnte man viel sagen. Aber ein genereller Tipp: bleib' bei EINER Sprache und mische nicht Deutsch und Englisch bei den Kommentaren und den Variablenname. Besser wäre natürlich alles Englisch, dann ist es "international lesbar".

    Gruß, noisefloor

    Hallo,

    Zitat

    Ich habe VIER Installationen von OpenCV auf meinen Rechnern.
    2.4.9, 3.0,3.1,
    Nicht eine Funktioniert mit Python3.
    import cv2...................


    Wie viele Version du hast ist ziemlich Latte. Die Frage ist, wie viele Version für für Python 3 installiert hast. Python 3 und Python 2 benutzen _nicht_ die gleichen Module. Auf alles, was du für Python 2 installierst hast, kannst du grundsätzlich nicht in Python 3 importieren. Und umgekehrt.

    Zitat

    Um Python und die GUI besser zu verstehen habe ich mich intensiv, und ich meine intensiv, damit beschäftigt.
    Ich habe also gut 200 Scripte von Github geladen. Davon haben 80% mit Python3 NICHT funktioniert.


    Beschäftige dich doch mal lieber intensiv mit den Unterschieden von P2 und P3, dass ist vielleicht viel wichtiger. Das für P2 geschriebene Skripte, besonders die älteren, nicht ohne Modifikation unter P3 laufen, ist durchaus normal.

    Eilt ja nicht, weil Python 2.7 hat noch Support bis 2020. Aber bis dahin wäre es sehr ratsam, dass du und Python 3 Programmierfreunde seid ;)

    Gruß, noisefloor

    Hallo,

    Zitat

    ser.baudrate = 19200 vor ser = serial.Serial("/dev/ttyAMA0", timeout=0.5) bringt eine Fehlermeldung "is not defined"


    Kann ja auch nicht funktioniere - das Objekt `ser` muss ja erst mal instanziert werden, bevor du Methoden anwendest oder Attribute änderst / setzt. Dir ist aber schon klar, was dein Programmcode da macht / machen soll, oder? Ist der Code von dir oder hast du den per C&P von irgendwo übernommen und dann noch ggf. angepasst?

    Zitat

    Und zeitweise gehts ja auch.


    Wenn ein Programm "zeitweise" läuft spricht es definitiv nicht für das Programm bzw dafür, wie es programmiert ist...

    Zitat

    Wurde da was geändert?


    Da musst du wohl mal die ältere Doku von pyserial durchschauen :) pyserial 3.0 ist relativ neu, pyserial 2.x war der Vorgänger. Was wieder zu der Frage führt, die du weiter oben unbeantwortet gelassen hast: lief / lief nicht war auf dem gleichen OS in der gleichen Version?

    Und wie hast du pyserial installert? Paketquellen, pip, ...?

    Gruß, noisefloor

    Hallo,

    also laut Doku ist das auch völlig korrekt, das du die Fehlermeldung bekommst. Weil: mit ` ser = serial.Serial("/dev/ttyAMA0", timeout=0.5)` öffnest du den Port. Nur, wenn du `ser = serial.Serial()` benutzt und dann konfigurierst brauchst du ein explizites `ser.open()`.

    Kann es vielleicht sein, dass deine anderen Fehler daher kommen, dass du den Port mit ` ser = serial.Serial("/dev/ttyAMA0", timeout=0.5)` öffnest und dann noch Konfiguration (wie ` ser.baudrate = 19200`) nachschieben willst?

    Gruß, noisefloor

    Hallo,

    Zitat

    Was auch komisch ist, ich benötige den Befehl ser.open() nicht mehr. Er verursacht sogar eine Fehlermeldung. Hat vorher aber funktioniert.


    Vorher = gleicher Rechner, gleiches OS, gleiche Python-Version?

    Und welche Fehlermeldungen bekommst du bei `ser.open()`?

    Dein Python-Code ist übrigens für Außenstehende echt schwer zu lesen. Bei den ganzen kryptischen Variablennamen blickt man kaum durch. Es schadet generell nicht, wenn man aussagekräftige Variablennamen nimmt.
    Und auch, wie den SQL INSERT Befehlt zusammenbaust und schlechter Stil und anfällig für SQL Injections. Wie es richtig geht steht in der Python-Doku zum SQLite Modul.

    Gruß, noisefloor

    Hallo,

    Zitat

    Es müsste schon genauer sein, dies währe ja sicherlich mit "besseren" gps Empfängern möglich.


    Alles, was du im Hobby oder semiprofessionellem Bereich an GPS-Empfänger bekommst, kommt bestenfalls auf die von meigrafd genannten 2m Genauigkeit - aber auch nur unter Idealbedingungen (ebene, offene Fläche, das richtige Wetter etc). Typisch ist eher 3-4 m Genauigkeit. Was zum Wandern, Radfahren, Straßennavigation und auch Fliegen locker reicht.

    Klar gibt es genaueren GPS-Empfänger in der Vermessungstechnik, die Kosten aber auch richtig Kohle, benötigen eine externe Antenne und sind so groß, dass du zumindest ein sehr großes RC-Auto brauchst. Ein Beispiel für einen rel. günstigen professionellen Empfänger findest du hier: http://www.magicmaps.de/shop/produktli…-gps-paket.html

    Gruß, noisefloor

    Hallo,

    es gibt für Linux unzählige Bildbetrachter. Viele können auch drucken.

    Habe gerade kein Raspbian vor mir, aber ich meine, Raspbian hätte auch einen installiert... Wenn nein, dann installier' dir z.B. "Eye of Gnome" (Paketname: eog), der kann drucken.

    Gruß, noisefloor

    Hallo,

    Zitat

    Kann mir bitte jemand verraten wie ich von außerhalb zugriff auf Pi bekomme ?


    Indem du ihn so einrichtest, dass das geht. Pauschale Frage, pauschale Antwort ;) Konkret hängt das u.a. davon ab, welches OS auf deinem Pi läuft und wie dein Pi überhaupt ans Netz / Internet angebunden ist.

    Zitat

    Aber ich möchte von der Arbeit zum beispiel auf meine Musik oder meine Filme zugreifen.


    Hast du denn schon gecheckt, ob a) das Netzwerk deiner Arbeit das überhaupt zulässt und b) dein Arbeitgeber das überhaupt zu lässt?

    Gruß, noisefloor

    Hallo,

    vielleicht solltest du noch sagen, was du überhaupt programmiert haben möchtest. Das geht ja so null aus deinem Post hervor...

    Noch eine Anmerkung zum Geld: selbst von du einen "günstigen", freiberuflichen Programmierer findest, beträgt der Stundensatz ziemlich sicher mehr als 50,- Euro. Und wenn du tatsächlich ein Projekt hast, dass man als erfahrener Python-Programmier in < 1h umgesetzt bekommt, dann sollte das selbst ein Anfängen in wenigen Tagen hinkriegen, die nötige Motivation vorausgesetzt.

    Gruß, noisefloor

    Hallo,

    Zitat

    allerdings scheitere ich grandios an der Umsetzung, weil ich kein Programmierer bin.


    Das macht die Sache etwas schwieriger - aber nicht unmöglich :)

    Spontan würde ich das anders machen, und zwar:
    * Rohdaten aus der txt-Datei extrahieren und in eine SQLite Datenbank schreiben
    * den passenden SQL-Query für den gewünschten Zeitraum ausführen
    * Daten visualisieren

    Irgendwelche Rechnungen würde ich erst mit den Daten aus dem SQL-Query machen. Unmodifizierte Daten speichern und bei Bedarf rechnen ist eigentlich immer besser weil flexibler.

    In deinem Fall, also als nicht-programmierer, wäre aber IMHO noch ein andere Weg praktisch nämlich per Skript die Daten aus der txt auslesen, Datum und Uhrzeit splitten und dann in eine CSV-Datei schreiben. Die kannst du dann in Excel / LibreOffice Calc / ... einlesen und dort die Daten visualisieren.
    Das generieren der CSV-Datei ließe sich mit ein paar handvoll Zeilen Python oder Shell-Skript umsetzen.

    Gruß, noisefloor

    Hallo,

    @Schullty: Dein Problem ist, dass du entweder Antworten hier im Thread nicht liest oder beratungsresistent bis oder keinen Bock hast, durch ein bisschen Eigeninitiative selber zur Lösung zu kommen. Oder alles zusammen.

    meigrafd hat dir alles gesagt, was du wissen musst. Inkl., dass `os.system(...)` falsch ist - so startet man in 99,9% der Fälle kein Python-Skript aus einem Python Skript heraus. Und in einer GUI schon gar nicht.

    Gruß, noisefloor

    Hallo,

    wenn du das Modul `os` importierst, dann hast du das Dict `environ`, wo du alles findest.

    `os.environ['USER']` enthält den Nutzernamen. Wenn du aber in Wirklichkeit das Homeverzeichnis brauchst, dann kannst du direkt `os.environ['HOME']` nehmen.

    Gruß, noisefloor

    Hallo,

    wenn du ein System hast, welches systemd hat, kannst du das Skript als Service Unit starten.

    Zum Skript:
    * den Pfad zur DB bindest du jeden Schleifendurchlauf neu an die gleiche Variable -> außerhalb der Schleife definieren
    * gleiches gilt für die Verbindung zur DB, also `con = ...`
    * der `with con...` Block taucht 3x sehr ähnlich im Skript auf -> ein Indiz, dass du daraus eigentlich eine Funktion machen möchtest
    * wenn du Variablennamen erklären musst

    Code
    # cs = Current State
    # ps = Previous Stade
    cs_01 = 0 # REED 01
    ps_01 = 0


    dann weißt du, dass die Variablennamen schlecht gewählt sind - die sollten selbsterklärend sein.

    Gruß, noisefloor