python: datei von py file zu einem py file schicken

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

hallo

ich muss für eine übung ein python programm schreiben, welches eine datei ausliest und dann sie an einem anderen py file schickt, wie realisiere ich das in python?


und, ich suche jemanden der die nächsten paar stunden zeit hätte um mir bei der python programmierung zur hand liegen kann, ich würde auch dafür zahlen!!
ich muss es heute abgeben und brauche daher schnell hilfe!!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@hatemjapo: was verstehst Du unter „schicken“? Wenn Du Sockets meinst, dann gibt es im Netz genug Beispiele für Python-Server-Clients. Außerdem wird ja die Aufgabe nicht aus dem Nichts kommen, sondern Du hast die Grundlagen dazu schon ein Deinem Pythonkurs drangehabt.

Wenn Du mit „Hilfe“ meinst, jemand löst Deine Aufgaben für Dich, hoffe ich, dass Du niemanden findest. Wenn Du Deinen bisherigen Code hier postest und schreibst, was nicht tut, dann bekommst Du dagegen hier Hilfe kostenfrei ;-)
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

also, ich hab da ein python file, client.py, dies liest eine datei aus, teilt sie in teile und schickt sie an einem anderen python filn (server.py)
die server.py sollte dann die erhaltenen teile wieder zusammenlegen

das ist alles was ich bisher habe:

Code: Alles auswählen

def filecutter (file) :
	n = 10
	received = 0
    with open (filename) as f:
        size = f.size
    hasbeensend(0)
        for chunk in iter (lambda: f.read(100), ''): #the file should be cut into 100Byte pieces
            send_to_server (chunk)
			#waits for feedback, if it hasnt been send, then it will try for 10times
			while hasbeensend(0) & n =! 0 :
              send_to_server (chunk)
			  i = i+1
        


def sendtoserver (chunk) :
	
	#send it to a server and waits for a feedback, then gives true
	received = received +1
	return_hasbeensend(1)
und meine server.py ist noch leer

mit hilfe will ich niemanden der mir das programm schreibt, eher jemand der mir zur hand steht wenn cih wissen will wie ich das in python realisiere, da ich python nicht so gut kann, und ich hatte kein pythonkurs, sowas wurde uns garnicht angeboten
und cih zahle weil ich die hilfe dringend brauche!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@hatemjapo: der Client ist ja noch kein vollständiges Programm. Die Einrückung stimmt nicht, die Namen einiger Funktionen und Variablen sind falsch geschrieben und mehrere Funktionen sind nicht definiert und Variablen werden benutzt, ohne ihnen einen Wert zugewiesen zu haben. Das sind alles Dinge, die Du auch ohne tiefe Kenntnisse von Python reparieren kannst. Wo ist der Rest des Programms?
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

das ist der ganze programm den ich bis jetzt habe
er sollte ja auch nur ein file lesen, cutten und verschicken, mehr nicht

und genau deshalb brauche ich ja hilfe!!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann fang doch mal mit einer Methode an, welche eine Datei liest und zerlegt.
Das Leben ist wie ein Tennisball.
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

BlackJack

@hatemjapo: Nein das hast Du nicht. Der Quelltext ist ziemlicher Unsinn und ist von funktionierendem Python weit entfernt. Der Link in das Openbook hat mit dem Thema nicht viel zu tun — das Problem lässt sich problemlos ohne eigene Klassen lösen. Das Buch ist gerade bei Klassen und Objektorientierung, zumindest in der freien Ausgabe, auch nicht gut — um es mal diplomatisch auszudrücken.

Wie kann denn jemand verlangen so etwas in Python zu lösen wenn Python gar nicht gelehrt wurde? Oder sollest Du das selbstständig lernen und hast einfach nur bis zum letzten Tag mit dem Anfangen gewartet? Ich denke nicht das man das an einem Tag vernünftig hinbekommt wenn man es noch nicht einmal schafft Quelltext aus anderen Quellen mit korrekter Einrückung zu kopieren. Zusätzlich zu Pythongrundlagen ist das Thema Socket-Programmierung ja auch nicht so ganz trivial.
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

wir sollten es selbst lernen und dann die aufgabe lösen
aber das spielt jetzt keine rolle, ich brauch jetzt hilfe

ok, das was ich da habe ist kein richtiger python code, aber ganz ehrlich, das hilft mir nicht, hilfreich wäre zu sagen was da falsch ist und wie es richtig ist (zumindest wie es geschrieben wird) und ich bessere es dann selbst aus

ich kann java und c++ programmieren, also programmierkenntnisse habe ich, nur python kenne ich noch nicht

klassen bruache ich nicht, habe ich auch nicht erstellt, ich hab nur eine methode (laut dem handbuch erstellt)
du meinst das ist keine methode? wie schaut denn ne richtige methode in python aus?

nicht falsch verstehen, war jetzt nicht böse gemeint, aber antworten wie das stimmt so nicht, oder das ist falsch, oder lies dort oder da nach helfen mir echt nicht und kostet mich zu viel zeit, ich brauch konkrete antworten wie, es sollte so ausschauen (ich will keine lösungen, aber eine richtung)
bsp, du sagst mir wie eine methode ausschaut, und ich korrigiere und passe es in meinem code

um das einrücken kümmere ich mich später, ich muss zuerst mal den code fertig haben
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

hatemjapo hat geschrieben:wir sollten es selbst lernen und dann die aufgabe lösen
aber das spielt jetzt keine rolle, ich brauch jetzt hilfe
Da die Aufgabe wohl erst nicht heute kam, hast du wohl zu spät angefangen. Manchmal muss man es eben auf dem harten Weg lernen.
hatemjapo hat geschrieben:ok, das was ich da habe ist kein richtiger python code, aber ganz ehrlich, das hilft mir nicht, hilfreich wäre zu sagen was da falsch ist und wie es richtig ist (zumindest wie es geschrieben wird) und ich bessere es dann selbst aus
Gut: dein ganzer Code hat nicht viel mit Python zu tun, abgesehen von ein paar Schlüsselwörtern vielleicht. Ohne, dass du wenigstens das Tutorial durcharbeitest, brauchen wir dir gar nicht erst zu helfen. Dann könnten wir den Code gleich für dich schreiben.
hatemjapo hat geschrieben:um das einrücken kümmere ich mich später, ich muss zuerst mal den code fertig haben
Einrückung ist Bestandteil der Syntax, darum kannst du dich nicht später kümmern, das *musst* du sofort erledigen. Wie gesagt, ohne das grundlegende Verständnis durch das von mir verlinkte Tutorial wirst du in jedem Fall scheitern.
Das Leben ist wie ein Tennisball.
hatemjapo
User
Beiträge: 6
Registriert: Samstag 18. Januar 2014, 23:02

und genau deshalb suche ich ja hilfe

ich hab keine zeit um das tutorial durch zu machen

und aus dem grund will ich ja auch für die hilfe zahlen!!

ich brauch ne art crashkurs in python + unterstützung bei dieser ue

also bitte leute, helfts mir mit hilfreichen sachen, so dass ich zumindest irgendwas hab und verlinkts mich nicht irgendwohin, wie schon geschrieben, ich brauch konkrete antwroten
mein angebot steht noch, also schreibts mich per pn an
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

hatemjapo hat geschrieben:ich hab keine zeit um das tutorial durch zu machen

und aus dem grund will ich ja auch für die hilfe zahlen!!

ich brauch ne art crashkurs in python + unterstützung bei dieser ue
Das Tutorial ist der Crashkurs, schneller wird es dir niemand beibringen können. Hättest du damit um 15 Uhr angefangen, dann wärst du mit dem Lesen schon längst fertig.
Das Leben ist wie ein Tennisball.
BlackJack

Wie unterschiedlich so etwas doch in verschiedenen Programmiersprachen aussehen kann. Zum Beispiel senden in CoffeeScript und Empfangen in C++ mit Qt:

Code: Alles auswählen

#!/usr/bin/env coffee
'use strict'
net = require 'net'
fs = require 'fs'

main = ->
    client = net.connect
        port: 9090
        host: 'localhost'
    .on 'error', (error) -> console.log 'Connection error:', error.code
    .on 'connect', ->
        console.log 'connected.'
        fs.createReadStream 'in.bin'
        .on 'error',
            (error) ->
                console.log "File error: #{error.path} (#{error.code})"
                client.end()
        .pipe client
    .on 'close', -> console.log 'connection closed.'

main() if require.main == module
main.h

Code: Alles auswählen

#ifndef MAIN_H
#define MAIN_H

#include <QtCore>
#include <QtNetwork/QTcpServer>

#define BUFFER_SIZE 4096

class Main: public QObject
{
    Q_OBJECT

public:
    Main(QObject* parent);

private slots:
    void newConnection();

private:
    QTcpServer *_server;
};

#endif // MAIN_H
main.cpp

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include <QtNetwork/QTcpSocket>
#include "main.h"

Main::Main(QObject *parent)
{
    _server = new QTcpServer(parent);
    connect(_server, SIGNAL(newConnection()), SLOT(newConnection()));
    _server->listen(QHostAddress::LocalHost, 9090);
    qDebug() << "Listening for connections on"
             << _server->serverAddress().toString()
             << _server->serverPort();
}

void Main::newConnection()
{
    QTcpSocket *socket = _server->nextPendingConnection();
    Q_ASSERT(socket);
    QFile file("out.bin");
    qDebug() << "Opening file..." << file.fileName();
    if (file.open(QIODevice::WriteOnly)) {
        qint64 read_count;
        char buffer[BUFFER_SIZE];
        do {
            read_count = socket->read(buffer, BUFFER_SIZE);
            if (read_count == -1) {
                qCritical() << socket->errorString();
                break;
            }
            qint64 write_count = file.write(buffer, read_count);
            if (write_count == -1) {
                qCritical() << file.errorString();
                break;
            } else if (write_count != read_count) {
                // FIXME This is actually a programmer error.
                qCritical() << "Not all bytes written";
                break;
            }
            if (read_count != 0) {
                qDebug() << "  copied" << read_count << "bytes...";
            }
        } while (read_count > 0 || socket->waitForReadyRead());
        qDebug() << "Closing file..." << file.fileName();
        file.close();
    } else {
        qCritical() << "Can not open" << file.fileName() << endl
                       << file.errorString();
    }
    QCoreApplication::quit();
}

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    Main main(&app);
    return app.exec();
}
Zuletzt geändert von BlackJack am Mittwoch 29. Januar 2014, 08:51, insgesamt 1-mal geändert.
Grund: CoffeeScript auf 1,7 aktualisiert.
it-pro
User
Beiträge: 5
Registriert: Donnerstag 3. April 2014, 20:54

Da es hier am besten reinpasst. Kann ich auf die oben beschriebene Weise auch txt-Dateien einpflegen, die Python-Quelltext enthält? Mein Ziel ist es ein Pythonprogramm zu schreiben, das der Benutzer selbst mit seinem Smartphone ändern kann. Da nicht ohne zusätzliche App Python-Dateien geändert werden können, würde ich den Quelltext, der geändert werden darf gerne in eine txt-Datei schieben.
BlackJack

@it-pro: Über Sockets werden Bytes übertragen. Was diese Bytes letztendlich darstellen ist dem Socket egal.
Antworten