Seite 1 von 2

blutiger anfänger in python sucht hilfe :)

Verfasst: Dienstag 26. Dezember 2006, 03:57
von err0r
hi.

erstmal frohe weihnachten an alle :D


alsooo ich hab mich entschlossen python zu lernen, grund ist ganz einfach: ich programmier gerne.
meine bisherigen erfahrungen:
- java
- c++
- c
- php
- sql
- asm

asm mag ich nich so *g*


so, ich hab mich mal ran gesetzt und: [wiki]Tutorial[/wiki] durchgearbeitet. hab auch alles verstanden, nur irgendwie fehlt mir der bezug. also habt ihr vllt. aufgaben (net soo schwere) die ich lösen könnte oder gute tutorials mit beispielen (nem taschenrechner oder so)?!


liebe grüße und danke schonmal!
err0r


ps: ist es möglich mit python webanwendungen wie in php zu schreiben?
soweit ich weiss schon, denn wenn ja hätte ich ne projektidee 8)

Verfasst: Dienstag 26. Dezember 2006, 08:30
von sape
Hi und Willkommen im Forum.

Wenn es nichts spezielles sein soll, dan kannst du mal hier nach ein par Tutorials schauen: http://www.python-forum.de/forum-21.html
Ist alles möglich für Python dabei.
Und "A Byte of Python", "Wie ein Informatiker denken lernen ... mit Python" sind nicht schlecht (wobei die nciht gerade PEP8 einhalten. Aber das ist eine andere Geschichte.). -> [wiki]Tutorial[/wiki]

Dan sollte [wiki]FAQ#WieFangeIchAlsEinsteigerAn[/wiki]nicht fehlen (Deutschsprachige Lektüren im Netz #).

Falls du vorhast ernstahft dich mit Python zu beschäftigen solltest du auch mal den PEP8 Styleguid lesen! Das ist mMn sehr wichtig -> http://www.python.org/dev/peps/pep-0008/

lg und schönen rutsch ins neue Jahr
sape

Re: blutiger anfänger in python sucht hilfe :)

Verfasst: Dienstag 26. Dezember 2006, 09:03
von gerold
err0r hat geschrieben:habt ihr vllt. aufgaben (net soo schwere) die ich lösen könnte
Hi err0r!

Willkommen im Python-Forum!

Ich hätte eine kleine Aufgabe für dich. 8)

Im Thread http://www.python-forum.de/topic-8406.html hat droptix die Frage gestellt, ob es (in Python eingebaut) eine Möglichkeit gibt, CAB-Dateien zu entpacken. Die gibt es leider nicht.

Wie wäre es, wenn du ein Modul schreiben könntest, welches eine einfach zu handhabende Schnittstelle zum Entpacken von CAB-Dateien zur Verfügung stellt.

Die Einfachste Art ist, auf die dafür bereits vorgesehenen Programme "EXTRACT.EXE" (unter Windows) und CABEXTRACT (unter Linux) zurück zu greifen.
Du müsstest nur eine Funktion schreiben, die für beide Betriebssysteme nach aussen hin gleich aussieht und intern, je nach Plattform (sys.platform) auf das eine oder andere Programm zugreift und aufruft.

Programmaufrufe passieren über das Modul ``subprocess``. Natürlich solltest du auch irgendwie darauf reagieren, wenn eines der Programme nicht aufgefunden werden kann...

Ich finde, dass wäre ein nützlicher Beitrag, nicht so schwer und bringt Erfahrung im Umgang mit externen Programmaufrufen.

Später einmal, könntest du dich ja mit dem Algorithmus zum Entpacken von CAB-Dateien befassen. Vielleicht könntest du dann sogar eine reine Python-Lösung programmieren. Oder unter Linux (vielleicht auch unter Windows), direkt auf die libmspack zugreifen. Z.B. über das ctypes-Modul...

mfg
Gerold
:-)

Verfasst: Dienstag 26. Dezember 2006, 14:50
von err0r
hi!


also erstmal nen riesen dankeschön an sape und gerold für die ganzen informationen!


ich werde mir heute deine links sape anschauen und dann auch versuchen (wird schon klappen :D) das problem von dir zu lösen gerold :)


wenn ichs geschafft hab und/oder wenn ich weitere fragen hab meld ich mich :)


lg
err0r

Verfasst: Dienstag 26. Dezember 2006, 15:30
von Costi
ps: ist es möglich mit python webanwendungen wie in php zu schreiben?
soweit ich weiss schon, denn wenn ja hätte ich ne projektidee
klar, es gibt fuer apache eienen mod_python, wenn du dein c0de aber erstmal nur testen willst reicht ein kleienr python script als server aus
theoretisch kannst du wirklich alles (sogar assembler) als cgi script benutyen, es ist alles nur eien frage wie sehr die sprache als solches unterstuezt wird

edit:
aos, es gibt auch richtige frameworks fuer web-anwendungen in python: http://wiki.python.org/moin/WebFrameworks

Verfasst: Dienstag 26. Dezember 2006, 15:43
von lunar
Costi hat geschrieben:
ps: ist es möglich mit python webanwendungen wie in php zu schreiben?
soweit ich weiss schon, denn wenn ja hätte ich ne projektidee
klar, es gibt fuer apache eienen mod_python, wenn du dein c0de aber erstmal nur testen willst reicht ein kleienr python script als server aus
mod_python macht meiner Meinung nach aber nur Sinn, wenn man da auch ein schönes Web-Framework wie Django dranhängt. CherryPy ist für kleinere Projekte auch recht cool, weil es den Server gleich mitbringt. Da spart man sich das Einarbeiten in die Apache-Konfiguration ;)

@gerold Gib's zu, du bist nur zu faul, das selbst zu schreiben 8)

Verfasst: Dienstag 26. Dezember 2006, 18:04
von gerold
lunar hat geschrieben:@gerold Gib's zu, du bist nur zu faul, das selbst zu schreiben 8)
Hi lunar!

Der Gedanke, so etwas auf die Schnelle selber zu schreiben, ist mir sogar kurzzeitig gekommen. :wink:

Allerdings muss ich in ca. 14 Tagen ein funktionierendes Schnittstellenprogramm für Bankomatkassen-Terminals fertig haben und habe erst vor ein paar Tagen mit der Programmierung begonnen.

Jetzt können Python und wxPython beweisen, dass man damit in kurzer Zeit, produktiv einsetzbare, hochwertige Lösungen programmieren kann, denn dieses Programm wird ein bis zwei Tage lang von der in Österreich dafür zuständigen Firma getestet und dann zertifiziert. :? ...hoffentlich! :roll:

Also gebe ich meine Programmideen für die nächsten Tage an andere weiter. :twisted:

lg
Gerold
:-)

Verfasst: Dienstag 26. Dezember 2006, 19:03
von sape
gerold hat geschrieben: Jetzt können Python und wxPython beweisen, dass man damit in kurzer Zeit, produktiv einsetzbare, hochwertige Lösungen programmieren kann, denn dieses Programm wird ein bis zwei Tage lang von der in Österreich dafür zuständigen Firma getestet und dann zertifiziert. :? ...hoffentlich! :roll:
Dan wünsche ich dir viel glück :) Halte uns auf den Laufenden. Würde gerne dein fazit zu Python und wxPython in dem Kontext wissen. obwohl ich schon die Antwort kenne ;) :)

lg

Verfasst: Dienstag 26. Dezember 2006, 20:21
von lunar
sape hat geschrieben:
gerold hat geschrieben: Jetzt können Python und wxPython beweisen, dass man damit in kurzer Zeit, produktiv einsetzbare, hochwertige Lösungen programmieren kann, denn dieses Programm wird ein bis zwei Tage lang von der in Österreich dafür zuständigen Firma getestet und dann zertifiziert. :? ...hoffentlich! :roll:
Dan wünsche ich dir viel glück :) Halte uns auf den Laufenden. Würde gerne dein fazit zu Python und wxPython in dem Kontext wissen. obwohl ich schon die Antwort kenne ;) :)
Dem kann ich mich nur anschließen!

Außerdem kann ich noch hinzufügen, dass das ein Scherz war und ich natürlich niiiieeeemals ernsthaft auf die Idee gekommen wäre, dass du faul bist ;)

Re: blutiger anfänger in python sucht hilfe :)

Verfasst: Mittwoch 27. Dezember 2006, 02:33
von err0r
gerold hat geschrieben:
err0r hat geschrieben:habt ihr vllt. aufgaben (net soo schwere) die ich lösen könnte
Hi err0r!

Willkommen im Python-Forum!

Ich hätte eine kleine Aufgabe für dich. 8)

hi.

also ich hab das mal mit dem cab entpacken probiert und es läuft soweit auch, allerdings hab ich eine frage.
..schaut einfach ma in mein code..rest steht unten :)

Code: Alles auswählen

#!/usr/bin/python
import sys
import subprocess

if  sys.platform == 'linux2':

        #datei_lin = raw_input("Choose the cab file which you want to extract: ")
        #das problem ist, ich kann das jetzt hier einlesen aber wie sage ich dann bei command_lin = "cabextract -q" das er da die variable als datei nehmen soll?
        command_lin = "cabextract -q test.cab"

        if(subprocess.Popen(command_lin, shell=True, stdout=subprocess.PIPE) != True):
                print "extracting done"
        else:
                print "extracting failed"

elif sys.platform == 'win32':

        #datei_win = raw_input("Choose the cab file whoch you want to extract: ")

        command_win = "extract.exe..." # muss ich noch gucken wie das unter windows geht

        if(subprocess.Popen(command_win, shell=True, stdout=subprocess.PIPE) != True):
                print "extracting done"
        else:
                print "extracting failed"

else:
        print "decompress_cab could not locate your OS - error"

Verfasst: Mittwoch 27. Dezember 2006, 03:25
von Costi
very fine
aber:
if(subprocess.Popen(command_lin, shell=True, stdout=subprocess.PIPE) != True):
"os.system(command_lin)" mueste reichen

auserdem willst du doch die leute, die windows 64 bit benutzen (Gott segne sie...) nicht im stich lassen

gruesse
costi

[/quote]

Verfasst: Mittwoch 27. Dezember 2006, 09:24
von gerold
Costi hat geschrieben:"os.system(command_lin)" mueste reichen
Hi costi!

``os.system()`` poppt dir in vielen Fällen einfach eine Konsole auf. Für eine Schnittstelle, wie diese es werden soll, empfehle ich eher ``subprocess``.

mfg
Gerold
:-)

Verfasst: Mittwoch 27. Dezember 2006, 09:25
von gerold
auserdem willst du doch die leute, die windows 64 bit benutzen (Gott segne sie...) nicht im stich lassen
...

Code: Alles auswählen

sys.platform.startswith("win")

Re: blutiger anfänger in python sucht hilfe :)

Verfasst: Mittwoch 27. Dezember 2006, 09:48
von gerold
Hi err0r!

Super, dass du dich diesem Thema angenommen hast! :D

Hier ein paar Punkte, die du vielleicht beachten solltest.

- Es hat sich eingebürgert, vier Leerzeichen zum Einrücken zu verwenden. So lässt sich der Code untereinander gut austauschen.
- Versuche eine Zeile nicht länger als ca. 80 Zeichen lang werden zu lassen. Wir möchten den Code ja lesen können, ohne ständig hin und her scrollen zu müssen.
- Verwende Funktionen
- Verwende ``if __name__ == "__main__"``
- Schreibe Docstrings

So könnte die grobe Struktur des Python-Moduls aussehen:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
Entpackt CAB-Dateien.

Created:       2006-12-27 by err0r
Requirements:  Windows: extract.exe
               Linux und Co.: cabextract
"""

import os
import sys
import optparse


# Fehler-Klassen
class FileNotFound(IOError):
    def __init__(self, filename):
        self.filename = filename
    def __str__(self):
        return "Die Datei '%s' konnte nicht gefunden werden." % self.filename


def extract(cabfilename, destination_dir = "."):
    """
    Entpackt das angegebene CAB-File in den Zielordner.
    
    :param cabfilename: Dateiname und Pfad zum CAB-File das entpackt werden soll.
    :param destination_dir: Pfad zum Ordner in den das CAB-File entpackt 
        werden soll. Existiert der Ordner nicht, dann wird dieser erstellt.
    :return: True, wenn die CAB-Datei erfolgreich entpackt wurde.
        False, wenn die CAB-Datei nicht entpackt werden konnte.
    """
    
    # Prüfen ob CAB-Datei existiert
    if not os.path.isfile(cabfilename):
        raise FileNotFound(cabfilename)
    
    if sys.platform.startswith("win"):
        pass
    else:
        pass


def main():
    """
    Wennn das Python-Modul über die Kommandozeile aufgerufen wird...
    """
    
    # - Kommandozeilenparameter parsen. Z.B. mit ``optparse``
    # - extract ausführen
    pass


if __name__ == "__main__":
    main()
Das ist aber nur ein grober Vorschlag. Niemand muss sich daran halten.
Ich habe eine Fehler-Klasse eingebaut, damit du siehst, wie so etwas funktioniert. Dann habe ich die Doc-Strings im reStructuredText-Format geschrieben, das von EpyDoc interpretiert werden kann. Und mit optparse lassen sich Kommandozeilenparameter parsen und gleichzeitig die Kommandozeilen-Hilfe (--help) generieren.

mfg
Gerold
:-)

Verfasst: Mittwoch 27. Dezember 2006, 12:26
von Leonidas
Noch ein paar Tipps: ich würde nicht auf linux2 und win* testen, sondern auf win* und "etwas anderes", da "etwas anderes" meist Unix-System bedeutet und daher cabextract nutzen müsste.

Und noch was: subprocess.Popen erwartet als ersten Parameter eine Liste. Obwohl es zwar Strings akzeptiert, rate wich wirklich dazu, dort eine Liste zu übergeben. Dann kann es sich selbst um das Escapen von Leerzeichen etc. kümmern.

Verfasst: Mittwoch 27. Dezember 2006, 22:56
von err0r
Leonidas hat geschrieben:Noch ein paar Tipps: ich würde nicht auf linux2 und win* testen, sondern auf win* und "etwas anderes", da "etwas anderes" meist Unix-System bedeutet und daher cabextract nutzen müsste.
hi.

hab das probiert, allerdings funktionierte das nicht.

Code: Alles auswählen

if  sys.platform == 'linux*':
....
wenn ich das so abfrage wird das nicht true, er beachtet das * nicht als "ausfüllzeichen" sondern als festen teil des strings linux, also er denkt der name wäre "linux*". hoffe du weisst was ich mein :D

und @ gerold:

hab mir dein code angeguckt und werde mein quellcode jetzt mal verbessern. danke für deine anregungen :)


liebe grüße
err0r

Verfasst: Mittwoch 27. Dezember 2006, 23:27
von lunar
err0r hat geschrieben: hab das probiert, allerdings funktionierte das nicht.

Code: Alles auswählen

if  sys.platform == 'linux*':
....
wenn ich das so abfrage wird das nicht true, er beachtet das * nicht als "ausfüllzeichen" sondern als festen teil des strings linux, also er denkt der name wäre "linux*". hoffe du weisst was ich mein :D
Derartige Vergleich stellt man in Python anders an:

Code: Alles auswählen

# Wahr, wenn sys.platform mit dem Text "linux" anfängt
if sys.platform.startswith('linux'):
# Wahr, wenn der Text "linux" an einer beliebigen Stelle in sys.platform steht
if 'linux' in sys.platform:
Gruß
lunar

Verfasst: Donnerstag 28. Dezember 2006, 03:05
von err0r
vielen dank :)


hat wunderbar geklappt.

dann verbesser ich mein "kleines" tool mal weiter :)



liebe grüße
err0r

Verfasst: Donnerstag 28. Dezember 2006, 12:29
von Leonidas
Wie gesagt, ich würd gar nicht erst auf linux* testen, linux1 wird von Python sowieso nicht unterstützt und der dort Benötigte Befehl ist der gleiche wie bei *BSD. Somit ist der einzige Sonderfall Windows.

Verfasst: Donnerstag 28. Dezember 2006, 14:56
von err0r
oh, habe ich verbessert.

zeige euch wenn alles klappt heut abend meine neue version :)
dannach kommt glaub ich nen taschenrechner ;)


mfg
err0r