Mit Timer (Intervall) eine csv datei schreiben/erweitern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

@chrisxx8
Hast du den zweiten Beitrag nicht gelesen?
Sirius3 hat geschrieben:Auf Modulebene gehören nur Definitionen und Konstanten, der Rest sollte in eine Funktion, die üblicherweise main genannt wird.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@BlackJack
Compiler ist ja der, der meinen Code in eine Computer verständliche sprache umwandelt also Nullen und Einsen, soweit richtig?
So ich arbeite auf dem Raspberry mit IDLE, dort klick ich oben nur auf "Run --> Run module" und dann läuft es läuft nicht oder bringt ne Fehlermeldung im Shell. Wo finde ich den Compiler?
BlackJack

@chrisxx8: Der Compiler wird automatisch ausgeführt, den musst Du nicht suchen. Du solltest bei dem Quelltext in der Shell einen Syntaxfehler gemeldet bekommen. Selbst wenn das in IDLE nicht der Fall sein sollte, denn das scheint in der Hinsicht kaputt zu sein, sind auch noch andere Fehler in dem Quelltext. Zum Beispiel der erste `NameError` in Zeile 22.

Starte Programme die in einem Terminal laufen sollen am besten auch in einem Terminal und nicht von IDLE aus. Das verhält sich dort subtil anders als in einem Terminal.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@BlackJack
Nein die Shell gibt keinen Fehler aus
Es bleibt hierbei stehen:

>>>===========================Restart============================
>>>
|

Irgend wann nach 1min kommt dann
error: [errno 110] Connection timed out
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: ich bin gerade etwas verwirrt, weil der erste NameError schon in Zeile 12 kommt und mir der Syntaxfehler nicht auffällt.

@chrisxx8: kannst Du den FTP-Server per ftp erreichen?
BlackJack

@Sirius3: Die ``print``-Anweisungen sagen das ist Python 2 und in den Kommentaren sind Zeichen ausserhalb von ASCII enthalten — aber es fehlt der Kodierungskommentar. Aus IDLE wird das aber trotzdem ausgeführt ohne das sich der Compiler beschwert. Ich vermute mal IDLE verfüttert das Modul das man mit F5 startet, direkt als Unicode aus dem Editor an den Compiler. Der Namensraum von dem Modul steht ja nach der Ausführung auch in der interaktiven Shell zur Verfügung.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: Du hast recht. Mein 0-Informationskommentar-Filter beim Lesen muß ich das nächste mal abschalten.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@all
habe noch Probleme den PI ins www zu bekommen, und den ftp Server an zu pingen. Melde mich wenns soweit steht.

Hier habe ich das Programm für die ftp connection her http://www.suncol.de/programmierung/pyt ... datei.html
Bei ihm hat das Programm auch so funktioniert, versteh nicht so ganz warum ihr syntax fehler seht? Hab ich was falsch formatiert mh...
Was ich mit bei gebaut habe ist die Login überprüfung.

edit: jetzt seh ich gerade das die Login Geschichte ein Fehler hat, es müsste meinftp.cdw heißen
BlackJack

@chrisxx8: Eigentlich müsste es überall `ftp` statt `meinftp` heissen, denn dieses `mein` ist sinnfrei. Wessen `ftp` sollte das sonst sein? Das ist das einzige `FTP`. Und den von Sirius3 und mir erwähnten `NameError` hast Du damit noch nicht erwischt und der schlägt vor dem `ftp`/`meinftp` zu.

Ich sehe den Syntaxfehler wenn ich Dein Programm im Terminal starte. Der wird dann sofort ausgegeben. IDLE ist an der Stelle kaputt.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

So arbeite jetzt mit Pycharm. Ich bin mir nicht sicher ob ich den Debugger richtig bediene, ich finde auf jedenfall keinen Fehler.
Die Konsole haut mir hier jetzt diese Meldung raus:

Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.3\helpers\pydev\pydevd.py", line 2407, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.3\helpers\pydev\pydevd.py", line 1798, in run
launch(file, globals, locals) # execute the script
File "C:/Users/xxxx/Desktop/Christian_ftp.py", line 8, in <module>
ftp = ftplib.FTP("ftp.xxxx.de")
File "C:\Python27\lib\ftplib.py", line 120, in __init__
self.connect(host)
File "C:\Python27\lib\ftplib.py", line 135, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "C:\Python27\lib\socket.py", line 575, in create_connection
raise err
socket.error: [Errno 10060] Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

Der Code schaut nun so aus:

Code: Alles auswählen

#! /usr/bin/python


import ftplib

print "start"

ftp = ftplib.FTP("ftp.xxxx.de")
ftp.login("xxxx","xxxx")

if ftp.login == '230 Login successful.':
    print "login ok"
    ftp.cdw('debian')
    ftp.retrlines('LIST')
else:
    print "login not ok"

directory = '/homes/xxxx/' #ftp-Hauptverzeichnis
 
ftp.cwd(directory) #Wir nutzen das Hauptverzeichnis des ftp-Servers.
 
directory_local='/home/pi/' #lokales Upload-Verzeichnis
 
print "ftp: So sieht der Inhalt von ",directory, " vor dem Upload aus:"
print
ftp.retrlines('LIST')
 
 
filename = 'Ana_Value.csv'
 
print
print 'Ort und Name der lokalen Datei: ' + directory_local + filename
print
 
file = open(directory_local+filename, 'rb')

print 'Upload: ftp-Server: ' + directory +filename
 
#'STOR ' das geeignete ftp_Kommando
 
ftp.storbinary('Stor '+filename, file) #Es wird die Datei mit
    # dem Namen test.txt aus dem Hauptverzeichnis des Servers in die lokale
    # Datei mit dem Namen test2.txt im Verzeichnis E:/ geschrieben.

print "ftp: So sieht der Inhalt von ",directory, " nach dem Upload aus:"
print

ftp.retrlines('LIST')
 
print
print 'Die lokale Datei ' + directory_local+filename +' wird geschlossen.'
 
 
file.close()
 
 
print ftplib.quit()
print
print 'Die FTP-Verbindung wurde von mir getrennt.'
BlackJack

@chrisxx8: Dann musst Du jetzt wohl dafür sorgen das der FTP-Server erreich- und benutzbar ist. Das hat ja nur bedingt etwas mit Python/deinem Programm zu tun. Es sei denn die URL oder der Port stimmen nicht.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@Blackjack
Ja aber was ist denn jetzt mit dem fehler den du siehst?
Warum wird eine print funktion, wenn ich sie bei Zeile 10 einfüge nicht angezeigt?
Normal müsste er doch auch ausgeben "Login not ok" oder?
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

@chrisxx8
Weil vielleicht die Statusmeldung eine andere ist. Bei meinem FTP Server lautet die Meldung wie folgt:
``230 User mein_username logged in``

Die Frage bleibt: Kannst du überhaupt eine Verbindung aufbauen? Du nutzt ja Windows. Mach mal über die Konsole eine Verbindung. Gib einfach ftp ein und dann deine Daten.

Was wird mit folgendem Programm ausgegeben?

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

from __future__ import print_function
from ftplib import FTP


SERVER = 'xx.xxxxxx.xxx'
USER = 'username'
PASSWORD = 'passwort'


def main():
    ftp = FTP(SERVER)
    print(ftp.login(USER, PASSWORD))
    ftp.quit()


if __name__ == '__main__':
    main()

BlackJack

@chrisxx8: Eine `print()`-Funktion an der Stelle wird nicht ausgeführt weil das Programm nicht soweit kommt. Die Zeile davor löst doch nach Deinen eigenen Angaben die Ausnahme aus. Wie soll dann *irgendwas* danach ausgeführt werden?
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@lackschuh
ich arbeite auf dem raspberry.

das hier wird ausgegeben im debugger:
/usr/bin/python2.7 /home/pi/Downloads/pycharm-community-2016.1.2/helpers/pydev/pydevd.py --multiproc --qt-support --client 127.0.0.1 --port 43582 --file /home/pi/Christian_ftp2.py
warning: Debugger speedups using cython not found. Run '"/usr/bin/python2.7" "/home/pi/Downloads/pycharm-community-2016.1.2/helpers/pydev/setup_cython.py" build_ext --inplace' to build.
pydev debugger: process 22874 is connecting

Connected to pydev debugger (build 145.844)

Und unter run passiert garnichts.
Wenn ich es im raspberry LX Terminal starte passiert ebenfalls nichts.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

Also ich kann ftp.xxx.xx anpingen, aber ich kann diesen nicht über den Browser erreichen.
BlackJack

@chrisxx8: Doch natürlich passiert etwas und das hast Du weiter oben doch auch beschrieben: Nach einer ganzen Weile, in der in Zeile 8 versucht wird die Verbindung zum FTP-Server herzustellen, gibt es eine Zeitüberschreitung, welche zu einer Ausnahme führt. Das steht ziemlich deutlich in dem Traceback den Du gezeigt hast. Und wenn in Zeile 8 der Fehler ist, der zur Ausnahme führt, dann wird logischerweise das was in Zeile 10 steht, nicht ausgeführt, weil der Programmfluss nie bis dort hin kommt.

Wenn der FTP-Server nicht mit entsprechenden FTP-Clients ansprechbar ist, dann wird Python das auch nicht können.
chrisxx8
User
Beiträge: 27
Registriert: Mittwoch 4. Mai 2016, 15:16

@BlackJack
"Wenn der FTP-Server nicht mit entsprechenden FTP-Clients ansprechbar ist, dann wird Python das auch nicht können."
Hiermit meinst du das ich den Server nicht über den Browser erreichen kann? Also muss ich da jetzt erstmal anpacken..
BlackJack

@chrisxx8: Wenn Dein Browser FTP kann, dann ja.
Antworten