Beiträge von JanR
-
-
Ok. das funktioniert einwandfrei.
Vielen Dank Manul für deine Geduld. So stelle ich mir das "Programmieren lernen" vor. Vormachen, nachmachen und erklären.
Zum erklären versuche ich es selber: Mein Problem war, dass mit der write methode in "w" nur die erste Zeile der ser.readline ausgegeben wurde. Da sie ja leer war, konnte man nichts sehen und so dachte ich, dass die Ausführung nicht funktioniert.
In deinem script definierst du einen Beginn und das Ende der ser.readline die du token nennst. Wenn der Beginn erfüllt ist, ließt du die anderen Zeilen aus und definierst sie in date, msg und code.
Diese speicherst du dann zeitgleich in beiden Dateien sobald das Ende der Nachricht erfüllt ist.
Danke nochmal. Ich werde jetzt nacharbeiten und mir die genutzten methoden noch einmal zu Gemüte ziehen.
-
0d0a
32313a30342031362e31302e31380d0a
3033410d0a
45696e7a656c727566204f7274732e424d3a200d0a
00
das kam raus
-
so?
while True:
token = ser.readline
print token.encode('hex')
if (token == BOM): # Wir empfangen eine neue Nachricht
kommt ein Fehler:
AttributeError: 'builtin_function_or_method' object has no attribute 'encode'
-
Hast nur bei der with open einen : vergessen. Leider ließt dein script nichts aus. hab noch eine print anweisung rein gebracht, aber auch da kommt nix. die BOM Bedingung scheint nicht erfüllt denke ich...
-
Es ist immer gleich:
Zeilenumbruch
Datum Uhrzeit
Code
Text
Zeilenumbruch
-
wenn ich die ser.readlines in x setze ist das doch immer vollständig oder? und dann führe ich das speichern in die Datei ja erst aus, wenn x stattfindet. Also muss der komplette Text ja in x sein oder?
-
haben bestimmt zusammen geschrieben. Du hast in deinem Quelltext die Unterstriche bei file 1 zu file_1 vergessen. Hab das ergänzt. jetzt geht die append wieder.
Jetzt verstehe ich die Ausgabe. Ok. Kann ich das ändern? möchte das in der write.txt genau das gleiche drin steht wie in der append.txt
Das möchte ich dann splitten. dazu habe ich das script schon fertig
-
hab in deinem neuen Quelltext die Unterstriche in file 1 zu file_1 ersetzt. jetzt wie immer. "a" schreibt rein "w" nicht
-
Ausgabe in der console:
<type 'str'>
writing x = "
" to file 1
done
writing x = "
" to file 2
done
<type 'str'>
writing x = "12:51 16.10.18
" to file 1
done
writing x = "12:51 16.10.18
" to file 2
done
<type 'str'>
writing x = "23A
" to file 1
done
writing x = "23A
" to file 2
done
<type 'str'>
writing x = "Einzelruf
" to file 1
done
writing x = "Einzelruf
" to file 2
done
<type 'str'>
writing x = "" to file 1
done
writing x = "" to file 2
done
keine Ausgabe in beiden txt Dateien
-
im print steht in der Console der Komplette Text der empfangen wird. auch in der append.txt (hab es mal in deine Dateienamen geändert) steht der Text. . Die write.txt. ist jetzt leer. vorher stand Testtext drin
-
So endlich Zeit gefunden. Daher bin ich ja auch so ratlos. Mein skript funktioniert nicht.
wenn ich in meinem skript x = "test". einfüge und die ser.readline() auskommentiere, funktioniert es wie es soll.
Gehe davon aus das es mit der ser. readline() zu tun hat. Weiß aber nicht warum und wie ich das ändern kann.
Setze in die beiden with-Konstrukte auch noch mal print statements und gib dort file_x.name und file_x.mode aus. Wie sehen die aus?
Da komme ich leider noch nicht mit. Weiß nicht was du damit meinst.
-
Habe wie Manul es vermutet keinen USB Stick o.ä. am Port. Dort läuft ein Funkalarmempfänger der wenn er alarmiert ist daten übermittelt. Aber wie gesagt da geht es ja nicht drum. Das Problem ist, dass bei "w" nicht in die datei Geschrieben wird. In ihr steht nix.
und poste erneut die Ausgabe der obigen Befehle.
Wie genau rufst Du Dein Skript denn auf?drwxr-xr-x 26 pi pi 4096 Okt 10 10:34 /home/pi
-rwxrwxrwx 1 pi pi 1128 Okt 11 08:26 /home/pi/test.txt
-rwxrwxrwx 1 pi pi 2 Okt 11 08:26 /home/pi/LOG_D.txt
die tail hab ich ausgeführt. Da kommt bei LOG_D.txt keine Ausgabe und bei test.txt kommen alle Meldungen (darf ich nicht darstellen)
uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)
Gestartet wird das script über die RC.local.
Zum testen starte ich es direkt über die Console.
-rw-r--r-- 1 pi pi 18 Okt 11 09:32 /home/pi/append.txt
-rw-r--r-- 1 pi pi 9 Okt 11 09:32 /home/pi/write.txt
In der append.txt steht 2x Testtext in der write 1x. Dein Script funktioniert
uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)
-
Sehr gerne. Hoffe das ist jetzt richtig so:
Python
Alles anzeigen#!/usr/bin/env python # -*- coding: utf8 -*- import time import urllib # import RPi.GPIO as GPIO import csv import os import serial from datetime import datetime ser = serial.Serial( port='/dev/ttyUSB0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) ser.isOpen() while 1: x=ser.readline() if x: #file = open('/home/pi/test.txt', 'a') #file.write(x) #file.write("\n") #file.close() print(x) with open("/home/pi/LOG_D.txt", "w") as file_1: file_1.write(x) with open("/home/pi/test.txt", "a") as file_2: file_2.write(x)
-
Kannst Du für die beiden Dateien bitte mal absolute Pfade und Dateinamen, die nicht mit einem "." beginnen, verwenden?
home/pi/test.txt
home/pi/Log_D.txt
-
-rwxrwxrwx 1 pi pi 1 Okt 6 22:31 //datei 1
-rwxrwxrwx 1 pi pi 574 Okt 6 22:31 //datei 2
Das script ist nicht in dem Ordner in dem die dateien sind
-
Danke für den Code Hofei.
Leider funktioniert auch dieser nicht. Hmm bin mehr als ratlos.
Auch wenn ich die dateien tausche, schreibt er nur in die mit "a".
Also liegt es auch nicht an den Schreibrechten der Dateien.
-
Das hab ich erfolglos probiert. Auch wenn ich die Datei mit a auskommentiere schreibt er nicht in die w Datei.
-
Hallo liebe Forummitglieder,
nach wochenlangem Suchen, bin ich leider (für mich) gezwungen hier mal eine Frage zu stellen, da ich gerade in einem wohl eher simplen Programm nicht weiter komme.
Ich möchte eine über USB angeschlossene Informationsquelle abhören und bei einem Eingang die Information in Dateien speichern. Dieses zweimal. Einmal als Dokumentation mit dem Kürzel "a" und eimal zur Weiterverarbeitung mit "w".
Mein Problem ist, dass das mit überschreiben(w) nicht funktioniert... "a", "r2" funktioniert. "w" nicht.
Woran könnte das liegen?
Hab im Quellcode ein paar Sachen, die ich später noch brauche, also bitte nicht wundern.
Vielen Dank jetzt schon für eure informativen Antworten.
Gruß Jan
Python
Alles anzeigen#!/usr/bin/env python # -*- coding: utf8 -*- import time import urllib # import RPi.GPIO as GPIO import csv # import os import serial from datetime import datetime ser = serial.Serial( port='/dev/ttyUSB0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) ser.isOpen() def schreiben(): file = open("../../...txt", "w") time.sleep(3) datei = open("../../..2.txt", "a") file.write(x) datei.write(x) file.write("\n") datei.write("\n") file.close() datei.close() print(x) try: while 1: time.sleep(0.1) x = ser.readline() if x: schreiben() except KeyboardInterrupt: GPIO.cleanup() print("") print("KeyboardInterrupt") print("GPios resettet")
-
hab dbv´s Tip befolgt und mir das Filament auch mal zum testen geholt. Kann es nur bestätigen. Ergebnisse und schöne Farben. Mal was anderes. Nutze gerade Spray zum Fixieren auf meinem Anet A8. Nehmt ihr was anderes oder "besseres"?