From chris.arndt at web.de Sun Jan 7 18:55:30 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Sun, 07 Jan 2007 18:55:30 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_N=E4chstes_Treffen?= =?iso-8859-1?q?_von_pyCologne_am_10=2E01=2E2007?= Message-ID: <45A13412.60902@web.de> Hallo allerseits und auch ein Frohes Neues Jahr noch! Das nächste Treffen von pyCologne, der Python User Group Köln, findet statt am: Datum: 10.01.2007 Uhrzeit: 18:30 Uhr c.t. Ort: Pool 0.14, Benutzerrechenzentrum (RRZK-B) der Universität Köln, Berrenrather Str. 136, 50937 Köln Nähere Informationen (Programm, Wegbeschreibung, etc.) findet man hier: http://wiki.python.de/User_Group_K%C3%B6ln#Termine Wir laden alle Python-Begeisterten aus der Umgebung ein, ob Entwickler, Anwender oder einfach nur neugierig, zu diesem Treffen zu kommen! Es freut sich auf Euer zahlreiches Kommen Christopher Arndt From mmueller at python-academy.de Sun Jan 7 22:20:35 2007 From: mmueller at python-academy.de (Mike =?iso-8859-1?Q?M=FCller?=) Date: Sun, 07 Jan 2007 22:20:35 +0100 Subject: [Python-de] Python-Stammtisch in Leipzig, 09.01.07, 20:00 Uhr Message-ID: <7.0.1.0.0.20070107221720.01c56680@python-academy.de> ========================= Leipzig Python User Group ========================= Stammtisch am 09.01.2007 ------------------------- Wir treffen uns am 09.01.2007 um 20:00 Uhr wieder im im Schulungszentrum der Python Academy in Leipzig (http://www.python-academy.de/Schulungszentrum/anfahrt.html). Unser Thema ist diesmal Trac (http://trac.edgewall.org). Stefan Schwarzer wird die Nutzung von Trac mit Beispielen erläutern. Für das leibliche Wohl wird gesorgt. Wir bitten um kurze Anmeldung per e-mail an: info at python-academy.de An den Treffen der Python Anwendergruppe kann jeder teilnehmen, der Interesse an Python hat, die Sprache bereits nutzt oder nutzen möchte. Die Arbeitssprachen des Treffens ist Deutsch. Englisch sprechende Python-Enthusiasten sind trotzdem herzlich eingeladen. Wir übersetzen gern. Aktuelle Informationen zu den Treffen sind immer unter http://www.python-academy.de/User-Group/index.html zu finden. From m.gehling at gmx.de Tue Jan 16 21:33:58 2007 From: m.gehling at gmx.de (M.Gehling) Date: Tue, 16 Jan 2007 21:33:58 +0100 Subject: [Python-de] =?iso-8859-15?q?ODBC_f=FCr_Mac_os_x?= Message-ID: <45AD36B6.9040409@gmx.de> Hallo, habe inzwischen viel ausprobiert, aber leider hat bisher nichts funktioniert. Und inzwischen bin ich auch etwas verwirrt. habe mit mx.odbc den iodbc-driver gebaut. Der "import mx.ODBC.iODBC" geht, nur bekomme ich den " mx.ODBC.iODBC.DriverConnect('DSN=XXX',UID='YYY';PWD='ZZZ')" nicht hin. Wie hängt der odbc-administrator dazwischen? Was ist mit der .odbc.ini ? From foxx at php4you.de Wed Jan 17 22:00:35 2007 From: foxx at php4you.de (foxx) Date: Wed, 17 Jan 2007 22:00:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? Message-ID: <45AE8E73.3010704@php4you.de> Hallo, ich habe mich vor wenigen Minuten bei dieser Maillingliste angemeldet. Ich habe vor einigen Monaten mit der Python-Programmierung begonnen und mich in der Zeit davor besonders mit PHP berschäftigt. Mit Python habe ich nicht vor hauptsächlich Webseiten zu schreiben (Wie mit PHP), sondern eher grafische Applikationen mit PyGTK/Glade oder vielleicht auch wxPython zu erstellen. Vielleicht hab ich dann ja demnächst die ein oder andere Frage ;) PS: Die Bestätigungsmail nach abbonieren der Liste enthielt den folgenden Inhalt: >> Hallo, herzlich willkommen auf der größten, schönsten und einzigen >> deutschen Python Liste ;-) Dabei wundert mich, dass diese Liste nicht die einzige deutsche Python-Liste seien kann. Auf GoogleGroups gibt es eine Python-Gruppe: http://groups.google.com/group/de.comp.lang.python Naja... vielleicht kann das ja als Usenet durchgehen da die Mailfunktion nicht im Vordergrund steht ;) Gruß, Janek -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : signature.asc Dateityp : application/pgp-signature Dateigröße : 252 bytes Beschreibung: OpenPGP digital signature URL : http://python.net/pipermail/python-de/attachments/20070117/3496751d/attachment.pgp From chris.arndt at web.de Wed Jan 17 22:55:14 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Wed, 17 Jan 2007 22:55:14 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AE8E73.3010704@php4you.de> References: <45AE8E73.3010704@php4you.de> Message-ID: <45AE9B42.6000403@web.de> foxx schrieb: >>> Hallo, herzlich willkommen auf der größten, schönsten und einzigen >>> deutschen Python Liste ;-) Das ist wohl stark übertrieben. Diese Liste ist seit einigen Monaten so gut wie scheintot und ich frage mich, ob man sie nicht einfach abschaffen sollte. Viel mehr ist auf der von dir genannten Newsgroup los, die man durch Google Groups ja auch als Mailingliste beziehen kann. Durch Google Groups und Gmane verschwimmen die Grenzen zwischen ML und Newsgruppen ja sowieso stark. Außerdem gibt es noch: http://wiki.python.de/ und http://forum.python.de Gruß, Chris From pythonmailing at web.de Thu Jan 18 14:15:27 2007 From: pythonmailing at web.de (Marek Kubica) Date: Thu, 18 Jan 2007 14:15:27 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AE9B42.6000403@web.de> References: <45AE8E73.3010704@php4you.de> <45AE9B42.6000403@web.de> Message-ID: <20070118141527.4f16e72a@localhost> Hallo! On Wed, 17 Jan 2007 22:55:14 +0100 Christopher Arndt wrote: > Das ist wohl stark übertrieben. Diese Liste ist seit einigen Monaten > so gut wie scheintot Ja, stimmt. > Viel mehr ist auf der von dir genannten Newsgroup los, Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. Die Bemerkung in der Mail wurde warscheinlich auch noch "in jenen Tagen" geschrieben, damals hat das ja auch noch gestimmt. grüße, Marek From chris.arndt at web.de Thu Jan 18 15:31:58 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Thu, 18 Jan 2007 15:31:58 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <20070118141527.4f16e72a@localhost> References: <45AE8E73.3010704@php4you.de> <45AE9B42.6000403@web.de> <20070118141527.4f16e72a@localhost> Message-ID: <45AF84DE.1090207@web.de> Marek Kubica schrieb: > On Wed, 17 Jan 2007 22:55:14 +0100 > Christopher Arndt wrote: >> Viel mehr ist auf der von dir genannten Newsgroup los, > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. Naja, immerhin bereits ca. 100 Nachrichten im Januar: http://groups.google.com/group/de.comp.lang.python/about Chris From basti.wiesner at gmx.net Thu Jan 18 16:03:40 2007 From: basti.wiesner at gmx.net (Sebastian Wiesner) Date: Thu, 18 Jan 2007 16:03:40 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? In-Reply-To: <45AF84DE.1090207@web.de> References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> Message-ID: <200701181603.50679.basti.wiesner@gmx.net> Christopher Arndt hackte folgendes: > Marek Kubica schrieb: > > On Wed, 17 Jan 2007 22:55:14 +0100 > > > > Christopher Arndt wrote: > >> Viel mehr ist auf der von dir genannten Newsgroup los, > > > > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. > > Naja, immerhin bereits ca. 100 Nachrichten im Januar: So viel gibt es auf de.comp.os.unix.linux.misc oftmals an einem einzigen Tag... -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070118/213751e8/attachment.pgp From Helm.volker at gmx.de Thu Jan 18 16:55:35 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Thu, 18 Jan 2007 16:55:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <200701181603.50679.basti.wiesner@gmx.net> References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> <200701181603.50679.basti.wiesner@gmx.net> Message-ID: <20070118155535.211100@gmx.net> Nicht die Quantität ist immer entscheidend, außerdem gibt es mehr Leute, die Linux verwenden als python. Apropos, beschäftige mich gerade mit pygtk und wollte eine Datenbankabfrage in ein gtk.ListStore und gtk.TreeView automatisiert erstellen. Habt ihr Idee, wie die Strukturierung laufen soll? Über cur.execute(...) kann ich anschließend mit cur.description die Tabellenköpfe und Typen auslesen. Anhand diese Daten kann das gtk.ListStore und gtk.TreeView erstellt werden. Frage ist allerdings, wie mache ich das späte mit dem Lesen der einzelnen Sätze, der SQL wird auch häufiger neu aufgebaut, wobei allerdings der Struktur (Model + Header) gleich bleiben. Danke schon mal, Volker -------- Original-Nachricht -------- Datum: Thu, 18 Jan 2007 16:03:40 +0100 Von: Sebastian Wiesner An: python-de at python.net Betreff: Re: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? > Christopher Arndt hackte folgendes: > > Marek Kubica schrieb: > > > On Wed, 17 Jan 2007 22:55:14 +0100 > > > > > > Christopher Arndt wrote: > > >> Viel mehr ist auf der von dir genannten Newsgroup los, > > > > > > Nein, so viel mehr ist da auch nicht los. Da ist etwa so viel los, wie > > > hier, als es noch keine Newsgroup gab. Vielleicht auch weniger. > > > > Naja, immerhin bereits ca. 100 Nachrichten im Januar: > > So viel gibt es auf de.comp.os.unix.linux.misc oftmals an einem einzigen > Tag... > -- > Freiheit ist immer die Freiheit der Andersdenkenden. > (Rosa Luxemburg) -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail From basti.wiesner at gmx.net Thu Jan 18 17:07:35 2007 From: basti.wiesner at gmx.net (Sebastian Wiesner) Date: Thu, 18 Jan 2007 17:07:35 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <20070118155535.211100@gmx.net> References: <45AE8E73.3010704@php4you.de> <200701181603.50679.basti.wiesner@gmx.net> <20070118155535.211100@gmx.net> Message-ID: <200701181707.40051.basti.wiesner@gmx.net> Volker Helm hackte folgendes: > Nicht die Quantität ist immer entscheidend, außerdem gibt es mehr Leute, > die Linux verwenden als python. Nun, ich habe weder das eine noch das andere behauptet. Ich wollte lediglich darauf hinaus, dass "viel los" ein relativer Begriff ist. In der Python Newsgroup vermisse ich manchmal den Traffic, es braucht eben doch öfter mal etwas länger, bis eine Antwort da ist. Die Linux-Newsgroup leidet dagegen unter dem Traffic. Da ist viel Schrott dabei und man verbringt eine Menge Zeit nur mit dem Filtern der Nachrichten... -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070118/0a69cb46/attachment.pgp From diesch at spamfence.net Sat Jan 27 01:00:18 2007 From: diesch at spamfence.net (Florian Diesch) Date: Sat, 27 Jan 2007 01:00:18 +0100 Subject: [Python-de] Hallo und -> "Einzige" dt. Maillingliste? - Datenbankabfrage TreeView In-Reply-To: <20070118155535.211100@gmx.net> (Volker Helm's message of "Thu, 18 Jan 2007 16:55:35 +0100") References: <45AE8E73.3010704@php4you.de> <20070118141527.4f16e72a@localhost> <45AF84DE.1090207@web.de> <200701181603.50679.basti.wiesner@gmx.net> <20070118155535.211100@gmx.net> Message-ID: <877iv9l4od.fsf@spamfence.net> "Volker Helm" wrote: > Apropos, beschäftige mich gerade mit pygtk und wollte eine > Datenbankabfrage in ein gtk.ListStore und gtk.TreeView automatisiert > erstellen. > > Habt ihr Idee, wie die Strukturierung laufen soll? > > Über cur.execute(...) kann ich anschließend mit cur.description die > Tabellenköpfe und Typen auslesen. Anhand diese Daten kann das > gtk.ListStore und gtk.TreeView erstellt werden. Frage ist allerdings, > wie mache ich das späte mit dem Lesen der einzelnen Sätze, der SQL > wird auch häufiger neu aufgebaut, wobei allerdings der Struktur (Model > + Header) gleich bleiben. Mir ist nicht so ganz klar, wo dein Problem liegt. Solange die Struktur der Daten sich nicht ändert, musst du doch nur mit append(), prepend() o.ä. die Datensätze in den ListStore einfügen, ihn mit clear() leeren usw. Florian -- From stephan.diehl at gmx.net Mon Jan 29 18:17:33 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Mon, 29 Jan 2007 18:17:33 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr Message-ID: <45BE2C2D.1050404@gmx.net> Liebe Berliner Pythonistas, nach langer Pause wollen wir uns wieder treffen. Zeitpunkt: Fr, 2.2., 19 Uhr Ort: Cafe & Restaurant UNENDLICH Boetzowstrasse 14 10407 Berlin (Prenzlauer Berg "Boetzowviertel") Das ist etwa 100m vom "Filmtheater am Friedrichhain" entfernt. In der Naehe fahren die Tram M4 und der 200er Bus. Diesmal werden keine Vortraege gehalten, aber es wird getrunken, gegessen und vielleicht auch ueber Python geredet :-) In Zunkunft soll es auch wieder Vortraege geben. Wer noch nicht auf der berliner python mailingliste (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) eingetragen ist, sollte dies noch tun, da dort evtl. weitere Informationen verbreitet werden. Am besten schickt jeder, der kommen will, eine kleine Nachricht an die Liste, damit ich den Ueberblick behalte, wieviel in etwa kommen. Bis Freitag Stephan From stephan.diehl at gmx.net Mon Jan 29 18:35:01 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Mon, 29 Jan 2007 18:35:01 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE2C2D.1050404@gmx.net> References: <45BE2C2D.1050404@gmx.net> Message-ID: <45BE3045.4010705@gmx.net> Stephan Diehl wrote: sorry, falsche adresse: > (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) die richtige ist http://starship.python.net/mailman/listinfo/python-berlin From foxx at php4you.de Mon Jan 29 19:10:30 2007 From: foxx at php4you.de (foxx) Date: Mon, 29 Jan 2007 19:10:30 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE3045.4010705@gmx.net> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> Message-ID: <45BE3896.90907@php4you.de> Hallo, das Abbonieren dieser Liste scheint nicht zu funktionieren - ich bekomme immer eine 404 :-( Gruß, Janek Stephan Diehl schrieb: > Stephan Diehl wrote: > > sorry, falsche adresse: > > >> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >> > > die richtige ist > http://starship.python.net/mailman/listinfo/python-berlin > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > > From stephan.diehl at gmx.net Tue Jan 30 12:02:47 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Tue, 30 Jan 2007 12:02:47 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BE3896.90907@php4you.de> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> <45BE3896.90907@php4you.de> Message-ID: <45BF25D7.1070403@gmx.net> das Abbonieren funktioniert jetzt wieder dank des selbstlosen Einsatzes von Stefan Drees. foxx wrote: > Hallo, > > das Abbonieren dieser Liste scheint nicht zu funktionieren - ich bekomme > immer eine 404 :-( > > Gruß, > Janek > > Stephan Diehl schrieb: >> Stephan Diehl wrote: >> >> sorry, falsche adresse: >> >> >>> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >>> >> die richtige ist >> http://starship.python.net/mailman/listinfo/python-berlin >> >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> >> > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > From foxx at php4you.de Tue Jan 30 22:12:13 2007 From: foxx at php4you.de (foxx) Date: Tue, 30 Jan 2007 22:12:13 +0100 Subject: [Python-de] Berlin Python Treffen am 2.2. um 19 Uhr In-Reply-To: <45BF25D7.1070403@gmx.net> References: <45BE2C2D.1050404@gmx.net> <45BE3045.4010705@gmx.net> <45BE3896.90907@php4you.de> <45BF25D7.1070403@gmx.net> Message-ID: <45BFB4AD.9040209@php4you.de> Danke! Ich bin nun auch dabei :) Stephan Diehl schrieb: > das Abbonieren funktioniert jetzt wieder dank des selbstlosen > Einsatzes von Stefan Drees. > > foxx wrote: >> Hallo, >> >> das Abbonieren dieser Liste scheint nicht zu funktionieren - ich >> bekomme immer eine 404 :-( >> >> Gruß, >> Janek >> >> Stephan Diehl schrieb: >>> Stephan Diehl wrote: >>> >>> sorry, falsche adresse: >>> >>> >>>> (http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin) >>>> >>> die richtige ist >>> http://starship.python.net/mailman/listinfo/python-berlin >>> >>> >>> _______________________________________________ >>> python-de maillist - python-de at python.net >>> http://python.net/mailman/listinfo/python-de >>> >>> >> >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> > -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : signature.asc Dateityp : application/pgp-signature Dateigröße : 252 bytes Beschreibung: OpenPGP digital signature URL : http://python.net/pipermail/python-de/attachments/20070130/cb551ad2/attachment.pgp From Helm.volker at gmx.de Fri Feb 2 13:27:18 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 13:27:18 +0100 Subject: [Python-de] Maskierung von % Message-ID: <20070202122718.275410@gmx.net> Hi, wollte gerade einen String zur Ausgabe erstellen: s = "prozentuale Spanne %.2f %" % 15.23 Ergebnis sollte seind: prozentuale Spanne 15.23 % Leider wirft das System einen "ValueError: incomplete format" aus. Gibt es eine Möglichkeit das %-Zeichen zu maskieren, dass es nicht nach einer weiteren Variablen sucht? "\%" funktioniert leider nicht. Bis dann, Volker -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From hpj at urpla.net Fri Feb 2 13:33:37 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Fri, 2 Feb 2007 13:33:37 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202122718.275410@gmx.net> References: <20070202122718.275410@gmx.net> Message-ID: <200702021333.37389.hpj@urpla.net> Am Freitag, 2. Februar 2007 schrieb Volker Helm: > Hi, > > wollte gerade einen String zur Ausgabe erstellen: > > s = "prozentuale Spanne %.2f %" % 15.23 Probier doch mal: s = "prozentuale Spanne %.2f%%" % 15.23 Pete From Helm.volker at gmx.de Fri Feb 2 14:07:30 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 14:07:30 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <200702021333.37389.hpj@urpla.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> Message-ID: <20070202130730.245650@gmx.net> Gute Idee, funktioniert leider nicht generell: "% %.2f" % 15.23 -> Fehlermeldung "% %.2f%" % 15.23 -> Fehlermeldung "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt Schade, nicht schlecht, leider kein genereller Ansatz. Bis dann, Volker -------- Original-Nachricht -------- Datum: Fri, 2 Feb 2007 13:33:37 +0100 Von: Hans-Peter Jansen An: python-de at python.net CC: Betreff: Re: [Python-de] Maskierung von % > Am Freitag, 2. Februar 2007 schrieb Volker Helm: > > Hi, > > > > wollte gerade einen String zur Ausgabe erstellen: > > > > s = "prozentuale Spanne %.2f %" % 15.23 > > Probier doch mal: > s = "prozentuale Spanne %.2f%%" % 15.23 > > Pete > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From Helm.volker at gmx.de Fri Feb 2 14:09:13 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Fri, 02 Feb 2007 14:09:13 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C33276.2060001@novareto.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> Message-ID: <20070202130913.275410@gmx.net> Gerade das wollte ich vermeiden, lese nämlich einen kompletten SQL ein und wollte diesen mit nur einer/mehreren Zeilen erweitern. Da im Text häufiger ein "wert like '%suchbegriff%'" steht, müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam und unleserlich :( Bis dann, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 13:45:42 +0100 Von: Christian Klinger An: Volker Helm CC: Betreff: Re: [Python-de] Maskierung von % > Volker Helm schrieb: > > Hi, > > > > wollte gerade einen String zur Ausgabe erstellen: > > > > s = "prozentuale Spanne %.2f %" % 15.23 > > > > Ergebnis sollte seind: > > > > prozentuale Spanne 15.23 % > > > > Leider wirft das System einen "ValueError: incomplete format" aus. > > > > Gibt es eine Möglichkeit das %-Zeichen zu maskieren, dass es nicht nach > einer weiteren Variablen sucht? "\%" funktioniert leider nicht. > > > > Bis dann, > > > > Volker > > > Hallo > > vielleicht so: > > Python 2.3.5 (#1, Aug 22 2005, 22:13:23) > [GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin > Type "help", "copyright", "credits" or "license" for more information. > >>> a="%.2f %s" %(12.2,'%') > >>> a > '12.20 %' > >>> > > mfg Chrisitan -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From sschwarzer at sschwarzer.net Fri Feb 2 14:44:37 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 14:44:37 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130730.245650@gmx.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> Message-ID: <45C34045.7060503@sschwarzer.net> Hallo Volker, On 2007-02-02 14:07, Volker Helm wrote: > > Gute Idee, funktioniert leider nicht generell: > > > > "% %.2f" % 15.23 -> Fehlermeldung > > "% %.2f%" % 15.23 -> Fehlermeldung > > "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt > > > > Schade, nicht schlecht, leider kein genereller Ansatz. doch ein genereller Ansatz, - wenn man es richtig macht. ;-) Schreibe an der Stelle, wo das Prozentzeichen stehen soll, zwei Prozentzeichen direkt hintereinander: >>> >>> "%.2f %%" % 15.23456 '15.23 %' Beschrieben ist das unter http://docs.python.org/lib/typesseq-strings.html . Viele Grüße Stefan From chris.arndt at web.de Fri Feb 2 14:52:15 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Fri, 02 Feb 2007 14:52:15 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130913.275410@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> Message-ID: <45C3420F.1090000@web.de> Volker Helm schrieb: > Gerade das wollte ich vermeiden, lese nämlich einen kompletten SQL ein und wollte diesen mit nur einer/mehreren Zeilen erweitern. Was heißt erweitern? Anhängen oder irgendwo zwischen drin einfügen? Wenn ersteres: x = 15.23 s = sqlstring + "prozentuale Spanne %.2f %%" % x Wenn letzteres, dann musst du es ja wohl entweder manuell machen, oder du hast dafür auch einen Algorithmus (z.B. regular expressions), dann machst du die string substitution halt bevor du die Zeilen einfügst: import re sqlstring = u"Irgendein Text der Prozentzeichen (%) enthält. ${PLATZHALTER}. Noch mehr Text" sqlstring = re.sub(r'\$\{PLATZHALTER\}', "prozentuale Spanne %.2f %%" % x, sqlstring) > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam und unleserlich :( Da kann dir Python helfen: s = s.replace('%', '%%') natürlich, bevor du Platzhalter wie %s usw. einfügst. Chris From sschwarzer at sschwarzer.net Fri Feb 2 15:02:39 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 15:02:39 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070202130913.275410@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> Message-ID: <45C3447F.9060109@sschwarzer.net> Hi Volker, On 2007-02-02 14:09, Volker Helm wrote: > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, > müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam > und unleserlich :( dazu noch ein Hinweis: Setze den Suchbegriff als Argument in cursor.execute ein. Dadurch werden Zeichen, die in SQL Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten auch \), richtig maskiert. Also nicht suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE '%%%s%%'" % suchtext) # selbst eingesetzt - unsicher sondern suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser Beachte, dass hier der execute-Methode zwei Argumente übergeben werden. Außerdem musst du die Prozentzeichen am Anfang und Ende des Strings nicht verdoppeln (wenn der Datenbankadapter sauber programmiert ist). Wie einzusetzende Zeichenketten zu formatieren sind und wie das zweite Argument von cursor.execute aussehen muss, hängt vom konkreten Datenbankadapter ab. Näheres in der DB-API 2.0, an die sich alle neueren Adapter halten sollten, http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von dir verwendeten Datenbankadapter. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 15:31:04 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 15:31:04 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <20070202130730.245650@gmx.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> Message-ID: <45C34B28.2040806@lightlan.de> Hallo, würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt mfg Light Lan From tbender at cl.uni-heidelberg.de Fri Feb 2 15:46:23 2007 From: tbender at cl.uni-heidelberg.de (Tobias Bender) Date: Fri, 2 Feb 2007 15:46:23 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C34B28.2040806@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> Message-ID: <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen. 02.02.2007, at 15:31, Paul Rauch wrote: > Hallo, > > würde gerne wissen welche funktion es in python gibt um gefährliche > zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject > bastelt > > mfg Light Lan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > From deets at web.de Fri Feb 2 15:58:49 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 02 Feb 2007 15:58:49 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> Message-ID: <45C351A9.2070009@web.de> Tobias Bender schrieb: > Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder > mit re.match testen und bei Bedarf eine exception werfen. Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. Stattdessen verwendet man die parametrisierte Form von cursor.execute, etwa so: cursore.execute("select * from some_table where some_column = %s", some_column_parameter) Mfg Diez From mathias.uebel at meeloon.de Fri Feb 2 16:40:09 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Fri, 02 Feb 2007 16:40:09 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C351A9.2070009@web.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> Message-ID: <45C35B59.5030308@meeloon.de> Diez B. Roggisch schrieb: > Tobias Bender schrieb: >> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder >> mit re.match testen und bei Bedarf eine exception werfen. > > Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. > > Stattdessen verwendet man die parametrisierte Form von cursor.execute, > etwa so: > > cursore.execute("select * from some_table where some_column = %s", > some_column_parameter) > Das ist bekannt. Aber eventuell hatte der Frager etwas anders im Sinn: In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte Funktion: mysql_escape_string Naja, schönes Wochenende an Alle. From apaku at gmx.de Fri Feb 2 16:58:35 2007 From: apaku at gmx.de (Andreas Pakulat) Date: Fri, 2 Feb 2007 16:58:35 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C35B59.5030308@meeloon.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> <45C35B59.5030308@meeloon.de> Message-ID: <20070202155835.GB24075@morpheus.apaku.dnsalias.org> On 02.02.07 16:40:09, Mathias Uebel wrote: > Diez B. Roggisch schrieb: > > Tobias Bender schrieb: > >> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder > >> mit re.match testen und bei Bedarf eine exception werfen. > > > > Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. > > > > Stattdessen verwendet man die parametrisierte Form von cursor.execute, > > etwa so: > > > > cursore.execute("select * from some_table where some_column = %s", > > some_column_parameter) > > > Das ist bekannt. Das ist gut. > Aber eventuell hatte der Frager etwas anders im Sinn: > In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte > Funktion: mysql_escape_string Aehm in PHP gibts auch keine parametrisierte Funktion zum Ausfuehren von Anfragen, deswegen braucht man diese spezielle Funktion. Viel angenehmer ist es IMHO aber mit parametrisierten query-Funktionen zu arbeiten, weil ich dann nicht selbst aufpassen muss das alle Eingaben korrekt escaped werden. Andreas -- Make a wish, it might come true. From sschwarzer at sschwarzer.net Fri Feb 2 17:25:54 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 17:25:54 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C34B28.2040806@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> Message-ID: <45C36612.1050304@sschwarzer.net> Hallo Paul, On 2007-02-02 15:31, Paul Rauch wrote: > würde gerne wissen welche funktion es in python gibt um gefährliche > zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie Andreas Pakulat richtig sagte: die escape-Funktion braucht man nicht. Der zusätzliche Parameter für cursor.execute ist die "richtige", sauberere, Lösung. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 17:32:25 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 17:32:25 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C3677B.90604@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <1078A154-8008-4B0A-A261-098B95547E6D@cl.uni-heidelberg.de> <45C351A9.2070009@web.de> <45C35B59.5030308@meeloon.de> <45C3677B.90604@lightlan.de> Message-ID: <45C36799.2040008@lightlan.de> Paul Rauch schrieb: > Mathias Uebel schrieb: >> Diez B. Roggisch schrieb: >>> Tobias Bender schrieb: >>>> Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder >>>> mit re.match testen und bei Bedarf eine exception werfen. >>> Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. >>> >>> Stattdessen verwendet man die parametrisierte Form von cursor.execute, >>> etwa so: >>> >>> cursore.execute("select * from some_table where some_column = %s", >>> some_column_parameter) >>> >> Das ist bekannt. >> >> Aber eventuell hatte der Frager etwas anders im Sinn: >> In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte >> Funktion: mysql_escape_string >> >> Naja, schönes Wochenende an Alle. >> >> _______________________________________________ >> python-de maillist - python-de at python.net >> http://python.net/mailman/listinfo/python-de >> > ja, sowas in der art meinte ich. > > und mit whitelists werde ich nicht ohne weiteres fertig, wegem dem, was > ich plane. > das nutze ich für php. ich hätte gerne etwas mit gleicher funktion in > python. > > //benötigt für make_safe > function strip_gpc_slashes ($input){ > if ( !get_magic_quotes_gpc() || ( !is_string($input) && > !is_array($input) ) ){ > return $input; > } > if ( is_string($input) ){ > $output = stripslashes($input); > } elseif ( is_array($input) ) { > $output = array(); > foreach ($input as $key => $val) { > $new_key = stripslashes($key); > $new_val = strip_gpc_slashes($val); > $output[$new_key] = $new_val; > } > } > return $output; > } > // String ueberprufen und sicher machen fuer MySQL-Abfragen > function make_safe($variable) { > $variable = strip_gpc_slashes($variable); > $variable = addslashes(trim($variable)); > return $variable; > } > From LightLan at lightlan.de Fri Feb 2 17:54:16 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 17:54:16 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36612.1050304@sschwarzer.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> Message-ID: <45C36CB8.1060900@lightlan.de> Stefan Schwarzer schrieb: > Hallo Paul, > > On 2007-02-02 15:31, Paul Rauch wrote: >> würde gerne wissen welche funktion es in python gibt um gefährliche >> zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt > > siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie > Andreas Pakulat richtig sagte: die escape-Funktion braucht > man nicht. Der zusätzliche Parameter für cursor.execute > ist die "richtige", sauberere, Lösung. > > Viele Grüße > Stefan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > uhm, das verstehe ich nicht wirklich.. ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. sagen wir mal diese sind in der variable nutzerangaben gespeichert. und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht.. mfg Light Lan From sschwarzer at sschwarzer.net Fri Feb 2 18:23:13 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 18:23:13 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C37381.6080107@sschwarzer.net> Hallo Paul, On 2007-02-02 17:54, Paul Rauch wrote: > Stefan Schwarzer schrieb: >> On 2007-02-02 15:31, Paul Rauch wrote: >>> würde gerne wissen welche funktion es in python gibt um gefährliche >>> zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt >> siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie >> Andreas Pakulat richtig sagte: die escape-Funktion braucht >> man nicht. Der zusätzliche Parameter für cursor.execute >> ist die "richtige", sauberere, Lösung. > > uhm, das verstehe ich nicht wirklich.. > ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. > sagen wir mal diese sind in der variable nutzerangaben gespeichert. > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt > > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. damit ich weiß, wie weit ich ausholen muss: Wie weit hast du meine Mail an die Liste (2007-02-02 15:02:39) verstanden oder nicht? Am besten antwortest du auf jene Mail und wir diskutieren dort im Thread weiter. Viele Grüße Stefan From LightLan at lightlan.de Fri Feb 2 18:48:52 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 18:48:52 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <45C37984.9080207@lightlan.de> Stefan Schwarzer schrieb: > Hi Volker, > > On 2007-02-02 14:09, Volker Helm wrote: >> Da im Text häufiger ein "wert like '%suchbegriff%'" steht, >> müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam >> und unleserlich :( > > dazu noch ein Hinweis: Setze den Suchbegriff als Argument > in cursor.execute ein. Dadurch werden Zeichen, die in SQL > Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten > auch \), richtig maskiert. > > Also nicht > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%%s%%'" % > suchtext) # selbst eingesetzt - unsicher > > sondern > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Beachte, dass hier der execute-Methode zwei Argumente übergeben > werden. Außerdem musst du die Prozentzeichen am Anfang und Ende > des Strings nicht verdoppeln (wenn der Datenbankadapter sauber > programmiert ist). Wie einzusetzende Zeichenketten zu formatieren > sind und wie das zweite Argument von cursor.execute aussehen > muss, hängt vom konkreten Datenbankadapter ab. Näheres in der > DB-API 2.0, an die sich alle neueren Adapter halten sollten, > http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von > dir verwendeten Datenbankadapter. > > Viele Grüße > Stefan > hm.. dass verstehe ich ehrlich gesagt nicht. ich will doch nicht das ganze query escapen, sondern nur bestimmte einzelne eingaben von usern. mfg Light Lan From sschwarzer at sschwarzer.net Fri Feb 2 21:06:02 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 02 Feb 2007 21:06:02 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C37984.9080207@lightlan.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C37984.9080207@lightlan.de> Message-ID: <45C399AA.9080608@sschwarzer.net> Hallo Paul, On 2007-02-02 18:48, Paul Rauch wrote: > Stefan Schwarzer schrieb: >> dazu noch ein Hinweis: Setze den Suchbegriff als Argument >> in cursor.execute ein. Dadurch werden Zeichen, die in SQL >> Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten >> auch \), richtig maskiert. >> >> Also nicht >> >> suchtext = "Python's Prozentzeichen" >> cursor.execute( >> "SELECT text FROM table WHERE text LIKE '%%%s%%'" % >> suchtext) # selbst eingesetzt - unsicher >> >> sondern >> >> suchtext = "Python's Prozentzeichen" >> cursor.execute( >> "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", >> {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser >> >> Beachte, dass hier der execute-Methode zwei Argumente übergeben >> werden. Außerdem musst du die Prozentzeichen am Anfang und Ende >> des Strings nicht verdoppeln (wenn der Datenbankadapter sauber >> programmiert ist). Wie einzusetzende Zeichenketten zu formatieren >> sind und wie das zweite Argument von cursor.execute aussehen >> muss, hängt vom konkreten Datenbankadapter ab. Näheres in der >> DB-API 2.0, an die sich alle neueren Adapter halten sollten, >> http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von >> dir verwendeten Datenbankadapter. >> > dass verstehe ich ehrlich gesagt nicht. > ich will doch nicht das ganze query escapen, sondern nur bestimmte > einzelne eingaben von usern. bei der Variante mit dem zweiten Parameter werden alle Query- Parameter angegeben, die das SQL-Statement enthält. Dazu gehören "normale" Daten wie Zeichenketten, Zahlen und Datums- werte, nicht jedoch z. B. ein Tabellenname hinter FROM. Andererseits holt man die sich ja normalerweise nicht von einem Benutzer der Webschnittstelle. :-) Für dein Beispiel aus dem anderen Unter-Thread sähe die SQL- Ausführung so aus (ungetestet): # von irgendwoher, bspw. Webschnittstelle x = "Nutzereingabe" # ggf. mit Sonderzeichen y = "Bla" # ggf. mit Sonderzeichen cursor.execute( # nach dem SQL-Query steht ein Komma, kein %, d. h. # der Datenbankadapter übernimmt das Einsetzen der # Parameter - richtig maskiert "UPDATE db.table SET x='%(neu)s' WHERE y='%(kriterium)s' LIMIT 1", {'neu': x, 'kriterium': y}) Eine Bemerkung am Rande: Wenn du den LIMIT-Zusatz wirklich brauchst, hast du eine recht ungewöhnliche Anwendung. ;-) Viele Grüße Stefan From deets at web.de Fri Feb 2 21:41:37 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 02 Feb 2007 21:41:37 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C3A201.8050104@web.de> > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt > > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. Statt einen SQL-String zusammenzubauen, der auch Benutzerdaten enthaelt, baust du einen von folgender Form: sql = "update db.table set x = %s where y = %s limit 1" Das ist der SQL-String. Und den verwendest du dann wie folgt: cursor.execute(sql, nutzerangaben, bla) Damit sorgt der Treiber dafuer, das alles richtig escaped wird, bzw. besser noch das obiges statement auf db-seite gecached wird und parametrisiert. Die %s in dem String sind Platzhalter - aber nicht _du_ fuellst die aus, sondern der Treiber. Das ist dadurch sicher. Diez From LightLan at lightlan.de Fri Feb 2 22:17:51 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Fri, 02 Feb 2007 22:17:51 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C399AA.9080608@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C37984.9080207@lightlan.de> <45C399AA.9080608@sschwarzer.net> Message-ID: <45C3AA7F.8000901@lightlan.de> Stefan Schwarzer schrieb: > Hallo Paul, > > On 2007-02-02 18:48, Paul Rauch wrote: >> Stefan Schwarzer schrieb: >>> dazu noch ein Hinweis: Setze den Suchbegriff als Argument >>> in cursor.execute ein. Dadurch werden Zeichen, die in SQL >>> Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten >>> auch \), richtig maskiert. >>> >>> Also nicht >>> >>> suchtext = "Python's Prozentzeichen" >>> cursor.execute( >>> "SELECT text FROM table WHERE text LIKE '%%%s%%'" % >>> suchtext) # selbst eingesetzt - unsicher >>> >>> sondern >>> >>> suchtext = "Python's Prozentzeichen" >>> cursor.execute( >>> "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", >>> {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser >>> >>> Beachte, dass hier der execute-Methode zwei Argumente übergeben >>> werden. Außerdem musst du die Prozentzeichen am Anfang und Ende >>> des Strings nicht verdoppeln (wenn der Datenbankadapter sauber >>> programmiert ist). Wie einzusetzende Zeichenketten zu formatieren >>> sind und wie das zweite Argument von cursor.execute aussehen >>> muss, hängt vom konkreten Datenbankadapter ab. Näheres in der >>> DB-API 2.0, an die sich alle neueren Adapter halten sollten, >>> http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von >>> dir verwendeten Datenbankadapter. >>> >> dass verstehe ich ehrlich gesagt nicht. >> ich will doch nicht das ganze query escapen, sondern nur bestimmte >> einzelne eingaben von usern. > > bei der Variante mit dem zweiten Parameter werden alle Query- > Parameter angegeben, die das SQL-Statement enthält. Dazu > gehören "normale" Daten wie Zeichenketten, Zahlen und Datums- > werte, nicht jedoch z. B. ein Tabellenname hinter FROM. > Andererseits holt man die sich ja normalerweise nicht von > einem Benutzer der Webschnittstelle. :-) > > Für dein Beispiel aus dem anderen Unter-Thread sähe die SQL- > Ausführung so aus (ungetestet): > > # von irgendwoher, bspw. Webschnittstelle > x = "Nutzereingabe" # ggf. mit Sonderzeichen > y = "Bla" # ggf. mit Sonderzeichen > > cursor.execute( > # nach dem SQL-Query steht ein Komma, kein %, d. h. > # der Datenbankadapter übernimmt das Einsetzen der > # Parameter - richtig maskiert > "UPDATE db.table SET x='%(neu)s' WHERE y='%(kriterium)s' LIMIT 1", > {'neu': x, 'kriterium': y}) > > Eine Bemerkung am Rande: Wenn du den LIMIT-Zusatz wirklich > brauchst, hast du eine recht ungewöhnliche Anwendung. ;-) > > Viele Grüße > Stefan > den LIMIT zusatz mache ich nur aus Gewohnheit, kommt nicht gut, wenn ein update ohne WHERE und LIMIT durchrutscht... und danke, jetzt hab ichs verstanden :) >>> email = 'LightLan at lightlan.de' >>> name = 'Vorname\'\' \n Nachname' >>> cursor.execute('INSERT INTO test.entry(name,email) VALUES(%(name)s,%(email)s)',{'name':name,'email':email}) geht einwandfrei :) mfg Light Lan From martin at v.loewis.de Sat Feb 3 13:08:50 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sat, 03 Feb 2007 13:08:50 +0100 Subject: [Python-de] =?iso-8859-1?q?mysql_gef=E4hrliche_zeichen_=22escapen?= =?iso-8859-1?q?=22?= In-Reply-To: <45C36CB8.1060900@lightlan.de> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C34B28.2040806@lightlan.de> <45C36612.1050304@sschwarzer.net> <45C36CB8.1060900@lightlan.de> Message-ID: <45C47B52.7070204@v.loewis.de> Paul Rauch schrieb: > uhm, das verstehe ich nicht wirklich.. > ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. > sagen wir mal diese sind in der variable nutzerangaben gespeichert. > > und dann will ich halt ein > mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = > \'bla\' LIMIT 1') > und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne > mysqlinjection durchkriegt So, wie Du das geschrieben hast, wird einfach der Text 'Nutzerangeben' (fest) in die Tabelle eingefügt. Ich dachte, Du wolltest den Text eingeben, der in der Variable nutzerangaben steht? Das schreibt man so mysql.cursor.execute("UPDATE db.table SET x =%s WHERE y ='bla' LIMIT 1", nutzerangaben) Das verhindert bereits, dass ' reingeschmuggelt wird. > und wie funktioniert dieser zusätzliche parameter, was macht der? > versteh das nicht.. Die Parameter für execute funktionieren so ähnlich wie bei der %-Ersetzung, aber nicht ganz genau so. Vielmehr wird cursor.execute alle Parameter *automatisch* richtig escapen. Du musst nur an die Stelle, wo Du den Wert haben willst, im SQL %s schreiben (ohne Anführungszeichen - die macht .execute selber rein). Ciao, Martin From Helm.volker at gmx.de Mon Feb 5 09:13:52 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 09:13:52 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3401B.9090309@sschwarzer.net> References: <20070202122718.275410@gmx.net> <200702021333.37389.hpj@urpla.net> <20070202130730.245650@gmx.net> <45C3401B.9090309@sschwarzer.net> Message-ID: <20070205081352.282660@gmx.net> Spitze, das war es. Bin blind und habe die letzte Zeile brav überlesen :( Danke nochmals, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 14:43:55 +0100 Von: Stefan Schwarzer An: Volker Helm CC: Betreff: Re: [Python-de] Maskierung von % > Hallo Volker, > > On 2007-02-02 14:07, Volker Helm wrote: > > Gute Idee, funktioniert leider nicht generell: > > > > "% %.2f" % 15.23 -> Fehlermeldung > > "% %.2f%" % 15.23 -> Fehlermeldung > > "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt > > > > Schade, nicht schlecht, leider kein genereller Ansatz. > > doch ein genereller Ansatz, - wenn man es richtig macht. ;-) > > Schreibe an der Stelle, wo das Prozentzeichen stehen soll, > zwei Prozentzeichen direkt hintereinander: > > >>> "%.2f %%" % 15.23456 > '15.23 %' > > Beschrieben ist das unter > http://docs.python.org/lib/typesseq-strings.html . > > Viele Grüße > Stefan -- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a From Helm.volker at gmx.de Mon Feb 5 09:21:28 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 09:21:28 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <20070205082128.282650@gmx.net> Hi Stefan, gute Idee, allerdings ist es bei mir wohl kein Problem der Sicherheit. Erstens wird das Script nur intern verwendet, zweitens wird der SQL fest definiert, nur um die entsprechenden Einschränkungen erweitert, so kann ich eine Funktion für 5 SQL-Abfragen einsetzen (Blöde Adresssuche nach Namen, Telefon etc.). Die zusätzlichen individuellen Parameter werden über feste Bindungen übergeben: cur.execute("""select name,nummer from table where name like '%'||:p_begriff||'%'""", p_begriff = Suchbegriff) Danke aber trotzdem, Volker -------- Original-Nachricht -------- Datum: Fri, 02 Feb 2007 15:02:39 +0100 Von: Stefan Schwarzer An: python-de at python.net CC: Betreff: Re: [Python-de] Maskierung von % > Hi Volker, > > On 2007-02-02 14:09, Volker Helm wrote: > > Da im Text häufiger ein "wert like '%suchbegriff%'" steht, > > müsste ich immer dieses Sonderzeichen eintragen, das ist mühsam > > und unleserlich :( > > dazu noch ein Hinweis: Setze den Suchbegriff als Argument > in cursor.execute ein. Dadurch werden Zeichen, die in SQL > Sonderzeichen sind (vor allem ' , bei manchen SQL-Dialekten > auch \), richtig maskiert. > > Also nicht > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%%s%%'" % > suchtext) # selbst eingesetzt - unsicher > > sondern > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Beachte, dass hier der execute-Methode zwei Argumente übergeben > werden. Außerdem musst du die Prozentzeichen am Anfang und Ende > des Strings nicht verdoppeln (wenn der Datenbankadapter sauber > programmiert ist). Wie einzusetzende Zeichenketten zu formatieren > sind und wie das zweite Argument von cursor.execute aussehen > muss, hängt vom konkreten Datenbankadapter ab. Näheres in der > DB-API 2.0, an die sich alle neueren Adapter halten sollten, > http://www.python.org/dev/peps/pep-0249/ , und der Doku zum von > dir verwendeten Datenbankadapter. > > Viele Grüße > Stefan > > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From sschwarzer at sschwarzer.net Mon Feb 5 12:14:27 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Mon, 05 Feb 2007 12:14:27 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <20070205082128.282650@gmx.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <20070205082128.282650@gmx.net> Message-ID: <45C71193.30201@sschwarzer.net> Hi Volker, On 2007-02-05 09:21, Volker Helm wrote: > gute Idee, allerdings ist es bei mir wohl kein Problem der Sicherheit. Erstens > wird das Script nur intern verwendet, auch, wenn der Hinweis auf den zusätzlichen Parameter meist im Zusammenhang mit der Sicherheit kommt, ist er auch in allen anderen Fällen sinnvoll. Wenn eine einzusetzende Zeichenkette ein Apostroph ' enthält, gibt es dann zwar wahrscheinlich keine ausgenutzte Sicherheitslücke - aber einen Fehler bei der SQL-Ausführung. Daher sollte man _immer_ mit dem zweiten (und ggf. weiteren) Argument(en) von cursor.execute arbeiten, das macht den Code generell robuster. > zweitens wird der SQL fest definiert, nur > um die entsprechenden Einschränkungen erweitert, so kann ich eine Funktion für > 5 SQL-Abfragen einsetzen (Blöde Adresssuche nach Namen, Telefon etc.). > Die zusätzlichen individuellen Parameter werden über feste Bindungen übergeben: > cur.execute("""select name,nummer from table where name like '%'||:p_begriff||'%'""", p_begriff = Suchbegriff) Was du hier ja auch tust. :-) Viele Grüße Stefan From h.goebel at goebel-consult.de Mon Feb 5 14:26:41 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Mon, 05 Feb 2007 14:26:41 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C3447F.9060109@sschwarzer.net> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> Message-ID: <45C73091.1080109@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Stefan, > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser Sicher, dass Du das so willst? Denn falls der 'suchtext' ein Leer-/Sonderzeichen enthält, wird er escaped. Dann bekommst Du diese query: ... LIKE '%'such mich'%' ... Das ist sicher nicht das gewünschte :-) Besser _alles_ Quoting dem Treiber überlassen, das kann das im Zweifelsfall besser. Also: suchtext = "Python's Prozentzeichen" cursor.execute( "SELECT text FROM table WHERE text LIKE %(suchtext)s", {'suchtext': '%' + suchtext + '%' }) - -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel at goebel-consult.de | www.goebel-consult.de | -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRccwkczajR0mSa83AQKTOQgAgBzEaIMsSufn8b1CJoMk80LLZestubcj z42+WYgpCKFclN9+NFkVAcksoWPXdBX4JwX/LXiM0uCHYU009lCKOPbtOLJqVrTC k/iMoXuWvSWk31W0IysHdhgg0jBnBWogsqh0RzcMexzMCMBsMzx6z4H6c5gYweI6 0VdF89ia5gHHPqca3DErUrrMOcV5Uzcs9vpq3S0RN1fHCN0gcDwQo4qgRgdMCgMQ aLNOlm0GL2I1mSALJj1skWVAr8wkNC4LaGY/z+gL86kA1LNVyQu1NOElFm00yT+Q blRKI4bHCzfVFRVDrrRIP/nml/zSO12uLl+DRdH2Rgj/7Le0we4AMQ== =5w97 -----END PGP SIGNATURE----- From Helm.volker at gmx.de Mon Feb 5 15:24:28 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Mon, 05 Feb 2007 15:24:28 +0100 Subject: [Python-de] Maskierung von % In-Reply-To: <45C73091.1080109@goebel-consult.de> References: <20070202122718.275410@gmx.net> <45C33276.2060001@novareto.de> <20070202130913.275410@gmx.net> <45C3447F.9060109@sschwarzer.net> <45C73091.1080109@goebel-consult.de> Message-ID: <20070205142428.114360@gmx.net> Ich sollte vielleicht mal klarstellen, dass mein Problem gelöst ist. Es war folgendes, in einem SQL wird bei mir abgehandelt, ob es einen Rabatt gibt und um welche Art es sich handelt ('?', '%', 'Mengenrabatt'). Leider wird dieser SQL im Anschluß erweitert, abhängig, ob es sich um eine Position eines Auftrages handelt, oder um alle. Dies wird mittels: sql = """select blub, rabatt, case when rabatttyp = 0 then '%' else '?' end rabattyp from table where auftrag = :auftrag %s""" sqlauftrag = "" sqlposition = "and position = :position" erweitert. Durch das vorhanden sein des Prozentzeichens klappt der gesamte Vorgang nicht, habe die Maskierung in der Dokumentation leider überlesen. Sollten Begriffe mit like gesucht werden, werden die entsprechenden Werte entweder vom Benutzer als '%Hans%Müller%' eingegeben werden müssen oder werden entschprechend vorne und hinten um ein '%' Zeichen erweitert. suchbegriff = '%'+Eingabe.strip('%')+'%' Der Suchbegriff wird dann mittels eines Dictionary variablen = {'Suchbegriff': suchbegriff} und der Anweisung cur.execute(sql,variablen) verbunden und abgeschickt. So, noch einen schönen Tag, Volker > Hallo Stefan, > > > suchtext = "Python's Prozentzeichen" > > cursor.execute( > > "SELECT text FROM table WHERE text LIKE '%%(suchtext)s%'", > > {'suchtext': suchtext}) # vom DB-Adapter eingesetzt - besser > > Sicher, dass Du das so willst? Denn falls der 'suchtext' ein > Leer-/Sonderzeichen enthält, wird er escaped. Dann bekommst Du diese > query: > > ... LIKE '%'such mich'%' ... > > Das ist sicher nicht das gewünschte :-) > > Besser _alles_ Quoting dem Treiber überlassen, das kann das im > Zweifelsfall besser. Also: > > suchtext = "Python's Prozentzeichen" > cursor.execute( > "SELECT text FROM table WHERE text LIKE %(suchtext)s", > {'suchtext': '%' + suchtext + '%' }) > > > - -- > Schönen Gruß - Regards > Hartmut Goebel > > | Hartmut Goebel | IT-Security -- effizient | > | h.goebel at goebel-consult.de | www.goebel-consult.de | > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.5 (GNU/Linux) > Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org > > iQEVAwUBRccwkczajR0mSa83AQKTOQgAgBzEaIMsSufn8b1CJoMk80LLZestubcj > z42+WYgpCKFclN9+NFkVAcksoWPXdBX4JwX/LXiM0uCHYU009lCKOPbtOLJqVrTC > k/iMoXuWvSWk31W0IysHdhgg0jBnBWogsqh0RzcMexzMCMBsMzx6z4H6c5gYweI6 > 0VdF89ia5gHHPqca3DErUrrMOcV5Uzcs9vpq3S0RN1fHCN0gcDwQo4qgRgdMCgMQ > aLNOlm0GL2I1mSALJj1skWVAr8wkNC4LaGY/z+gL86kA1LNVyQu1NOElFm00yT+Q > blRKI4bHCzfVFRVDrrRIP/nml/zSO12uLl+DRdH2Rgj/7Le0we4AMQ== > =5w97 > -----END PGP SIGNATURE----- > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a From peter.wichmann at uni-muenster.de Mon Feb 5 16:53:07 2007 From: peter.wichmann at uni-muenster.de (Peter Wichmann) Date: Mon, 05 Feb 2007 16:53:07 +0100 Subject: [Python-de] =?iso-8859-15?q?=D6ffentliche_HTML-Seiten_anpassen?= Message-ID: <45C752E3.9060405@uni-muenster.de> Hallo, ein Blick ins Archiv der Liste zeigt, dass die Layoutanpassung unter 'Öffentliche HTML-Seiten anpassen' nicht unbedingt im Mittelpunkt der Diskussion steht. Dennoch meine Frage: Ich habe alle dort gelisteten Templates zur Bearbeitung des Seitenlayouts angepasst. Es muss in Mailman aber noch andere Templates geben, an die ich hierüber nicht rankomme. Beispiel /mailman/options/: Wer über die listinfo einen bestehenden Account bearbeiten will und sich anmeldet, landet auf einer Seite, die das Mailman-Standardlayout verwendet und die genannten Templates offensichtlich ignoriert. Übersehe ich etwas oder muss ich einen anderen Weg gehen? Peter From gherman at darwin.in-berlin.de Fri Feb 9 20:08:54 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Fri, 9 Feb 2007 20:08:54 +0100 Subject: [Python-de] types.SetType Message-ID: Hallo! Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die Variablen types.SetType (bzw. types.FrozensetType), was mich doch ein wenig erstaunt. Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- fuer, warum das jeder fuer sich tun sollte...? Gruss, Dinu -- Dinu C. Gherman ...................................................................... I love my Mac. I just wish it came in green! - www.greenmyapple.com From deets at web.de Fri Feb 9 20:46:31 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 09 Feb 2007 20:46:31 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CCCF97.6020503@web.de> Dinu Gherman schrieb: > Hallo! > > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? Sollst du ja gar nicht: >>> print type(set()) == set True Diez From sschwarzer at sschwarzer.net Fri Feb 9 20:58:26 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 09 Feb 2007 20:58:26 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CCD262.7000509@sschwarzer.net> Hallo Dinu, On 2007-02-09 20:08, Dinu Gherman wrote: > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? ich vermute, dass man inzwischen statt type(set()) einfach set verwenden sollte und statt type(frozenset()) nur frozenset: Python 2.4.3 (#1, Dec 29 2006, 02:22:42) >>> type(set()) is set True >>> type(frozenset()) is frozenset True Zum anderen stellt sich die Frage, was der Anwendungsfall für die Typprüfung ist. Wenn es die seltene emulierte Typprüfung mit isinstance ist, tut es problemlos etwas wie isinstance(value, set) . Dass noch so viele andere Typen im types-Modul rumliegen, die man analog zu oben bekommen kann, ist sicher eher der Kompatibilität alter Programme mit neueren Python-Versionen geschuldet. Andererseits gibt es ein paar Typen, die nicht in den Builtins vorhanden sind, z. B. module. Das kann man nur mit dem new-Modul relativ einfach erzeugen, soweit ich weiß. Wenn man also mit dem Modultyp vergleichen will, kann man isinstance(value, new.module) oder, wie ich gerade sehe, isinstance(value, types.ModuleType) verwenden. In Python 2.4.3 (s. o.) gilt jedenfalls Python 2.4.3 (#1, Dec 29 2006, 02:22:42) >>> new.module is types.ModuleType True Viele Grüße Stefan From gherman at darwin.in-berlin.de Fri Feb 9 21:02:53 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Fri, 9 Feb 2007 21:02:53 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCCF97.6020503@web.de> References: <45CCCF97.6020503@web.de> Message-ID: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Diez B. Roggisch: > >>> print type(set()) == set > True Das ist nicht der Punkt. Das Modul types gibt es eben darum, damit ich so etwas nicht immer schreiben muss (wie bei den leidigen Tests in der Art if type(obj) == type(""): ...). Im Moment scheint mir, als ob types.SetType einfach "vergessen" worden waere... Dinu From deets at web.de Fri Feb 9 21:41:06 2007 From: deets at web.de (Diez B. Roggisch) Date: Fri, 09 Feb 2007 21:41:06 +0100 Subject: [Python-de] types.SetType In-Reply-To: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Message-ID: <45CCDC62.7000208@web.de> Dinu Gherman schrieb: > Diez B. Roggisch: > >>>>> print type(set()) == set >> True > > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > damit ich so etwas nicht immer schreiben muss (wie bei den > leidigen Tests in der Art if type(obj) == type(""): ...). > > Im Moment scheint mir, als ob types.SetType einfach "vergessen" > worden waere... Aber es sind doch alle Konstruktoren die typen: type('') == str => True type(10) == int => True und so weiter. Das Modul types selbst ist unnoetig. Diez From gherman at darwin.in-berlin.de Sat Feb 10 19:24:13 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sat, 10 Feb 2007 19:24:13 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCDC62.7000208@web.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> Message-ID: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Diez B. Roggisch: > Aber es sind doch alle Konstruktoren die typen: > > type('') == str => True > type(10) == int => True > > und so weiter. Kurze Antwort: Du meinst wahrscheinlich Datentypen. Tatsaechlich gibt es Typen fuer alles Moegliche, Frames, Funktionen, sogar den Typ NotImplemented. Wenn man ein Programm schreibt, dass mit *allen* Typen zurechtkommen muss (von mir aus z.B. einen Debugger), dann moechte man eine uniforme Methode fuer die Typ-Pruefung verwenden. Ich dachte, dafuer waere das types-Modul geeignet. > Das Modul types selbst ist unnoetig. Ich finde, der Typ String ist streng genommen auch unnoetig und koennte durch Unicode allein ersetzt werden. Aber Python ist keine akademisch- theoretisch-saubere Sprache. Gruss, Dinu From pythonmailing at web.de Sat Feb 10 20:05:05 2007 From: pythonmailing at web.de (Marek Kubica) Date: Sat, 10 Feb 2007 20:05:05 +0100 Subject: [Python-de] types.SetType In-Reply-To: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Message-ID: <20070210200505.525514db@localhost> Hallo, On Sat, 10 Feb 2007 19:24:13 +0100 Dinu Gherman wrote: > Ich finde, der Typ String ist streng genommen auch unnoetig und > koennte durch Unicode allein ersetzt werden. Aber Python ist keine > akademisch- theoretisch-saubere Sprache. Ja, in Python 3.0 wird ja auch str durch Unicode ersetzt werden - es kommt lediglich ein bytes()-Typ hinzu, den man verwenden kann wenn Unicode mal grade stört. grüße, Marek From hpj at urpla.net Sat Feb 10 20:52:57 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Sat, 10 Feb 2007 20:52:57 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CCDC62.7000208@web.de> References: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> Message-ID: <200702102052.57985.hpj@urpla.net> Am Freitag, 9. Februar 2007 schrieb Diez B. Roggisch: > Dinu Gherman schrieb: > > Diez B. Roggisch: > >>>>> print type(set()) == set > >> > >> True > > > > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > > damit ich so etwas nicht immer schreiben muss (wie bei den > > leidigen Tests in der Art if type(obj) == type(""): ...). > > > > Im Moment scheint mir, als ob types.SetType einfach "vergessen" > > worden waere... > > Aber es sind doch alle Konstruktoren die typen: > > > type('') == str => True > type(10) == int => True > > und so weiter. > > Das Modul types selbst ist unnoetig. Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, wenn man sich eine der Evaluierungen spart: if type(obj) == types.StringType: ... Pete From martin at v.loewis.de Sun Feb 11 10:22:34 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:22:34 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CEE05A.7040105@v.loewis.de> Dinu Gherman schrieb: > Wie ich gerade sehe, gibt es weder in Python 2.4 noch in 2.5 die > Variablen types.SetType (bzw. types.FrozensetType), was mich doch > ein wenig erstaunt. > > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen, aber noch fehlt mir ein furchtbar intelligenter Grund da- > fuer, warum das jeder fuer sich tun sollte...? Du musst, glaube ich, mal erklären, *warum* Du den Typ in dem Modul haben willst ("weil alle anderen Typen da auch drin sind" ist nicht überzeugend, weil das kein technischer Grund ist). Ursprünglich gab es das Modul types, um Code der Form if type(o) is types.ListType: schreiben zu können, später dann if isinstance(o, types.ListType): Nun scheint Deine Beschwerde zu sein, dass Du nicht if isinstance(o, types.SetType): schreiben kannst; Diez versucht Dir zu erklären, dass Du statt dessen *viel einfacher* if isinstance(o, set) schreiben kannst. Das ist einfacher, weil Du nicht auf das Modul types zugreifen musst. Nun hast Du offenbar entweder missverstanden, dass das builtin set bereits ein Typ *ist*, oder Du hast einen anderen Anwendungsfall. Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:24:09 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:24:09 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: Message-ID: <45CEE0B9.7020905@v.loewis.de> Dinu Gherman schrieb: > Man kann sie zwar selbst auf type(set()) (bzw. type(frozenset()) > setzen Ich mache noch einen zweiten Versuch: Wenn Du types.SetType selber einführen wolltest, solltest Du *nicht* types.SetType = type(set()) schreiben, sondern types.SetType = set Weil: set *ist* bereits ein Typ. Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:27:01 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:27:01 +0100 Subject: [Python-de] types.SetType In-Reply-To: <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> Message-ID: <45CEE165.7070205@v.loewis.de> Dinu Gherman schrieb: > Das ist nicht der Punkt. Das Modul types gibt es eben darum, > damit ich so etwas nicht immer schreiben muss (wie bei den > leidigen Tests in der Art if type(obj) == type(""): ...). Und ein dritter Versuch. Bei neuem Code solltest Du *weder* if type(obj) == type(""): schreiben, noch if type(obj) == types.StringType: *sondern* if type(obj) == str (u.U. auch if isinstance(obj, str): ) Ciao, Martin From martin at v.loewis.de Sun Feb 11 10:28:44 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 10:28:44 +0100 Subject: [Python-de] types.SetType In-Reply-To: <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CCDC62.7000208@web.de> <2fe40e118bbe90809a67b1254712f54b@darwin.in-berlin.de> Message-ID: <45CEE1CC.80906@v.loewis.de> Dinu Gherman schrieb: > Wenn man ein Programm schreibt, dass mit *allen* Typen zurechtkommen > muss (von mir aus z.B. einen Debugger), dann moechte man eine uniforme > Methode fuer die Typ-Pruefung verwenden. Ich dachte, dafuer waere das > types-Modul geeignet. Seit Python 2.2 gibt es bessere Möglichkeiten als das types-Modul; deshalb wird es auch nicht systematisch um neue Typen erweitert (sondern besteht nur noch aus Rückwärtskompatibilität). Ciao, Martin From gherman at darwin.in-berlin.de Sun Feb 11 12:20:13 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sun, 11 Feb 2007 12:20:13 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CEE165.7070205@v.loewis.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> Message-ID: Martin v. Löwis: > Und ein dritter Versuch. Bei neuem Code solltest Du *weder* > > if type(obj) == type(""): > > schreiben, noch > > if type(obj) == types.StringType: > > *sondern* > > if type(obj) == str > > (u.U. auch > > if isinstance(obj, str): > > ) Ok, ich zaehle meine Versuche nicht so systematisch, aber vielleicht kommt es mit einem Beispiel meinerseits besser rueber. Was muesste ich also in den folgenden Zeilen fuer ??? einsetzen, um die gewuenschte Ausgabe zu bekommen? obj = NotImplemented if type(obj) == ???: print "verstanden" if isinstance(obj, ???): print "verstanden" Ich vermute, die Antwort lautet: ??? = type(NotImplemented). Und das ist eben nichts anderes als "frueher" bei Code wie: if type(obj) == type(""). Mit anderen Worten: woher bekomme ich das NotImplementedType, ohne type(NotImplemented) benutzen zu muessen? Antwort: aus dem Modul types. Wenn es keine andere Moeglichkeit gibt, ist das Modul nicht ueberfluessig. Wenn dem so ist und kein SetType/FrozenSetType drin ist, be- trachte ich das types-Modul als unvollstaendig, weil es einen uniformen Zugriff auf alle Typen ueber diese Variablen nicht mehr ermoeglicht. Ob das tragisch ist, sei dahingestellt, aber es ist nicht konsistent und nicht elegant. Gruss, Dinu From martin at v.loewis.de Sun Feb 11 15:36:22 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 15:36:22 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> Message-ID: <45CF29E6.709@v.loewis.de> Dinu Gherman schrieb: > Was muesste ich also in den folgenden Zeilen fuer > ??? einsetzen, um die gewuenschte Ausgabe zu bekommen? > > obj = NotImplemented > > if type(obj) == ???: > print "verstanden" > > if isinstance(obj, ???): > print "verstanden" > > Ich vermute, die Antwort lautet: ??? = type(NotImplemented). Korrekt. Was aber hat das mit SetType zu tun? (siehe Subject) In dem konkreten Fall würde ich aber if obj is NotImplemented: print "verstanden" schreiben: NotImplemented ist ein Singleton. Man schreibt ja auch if foo is None: anstelle von if isinstance(foo, types.NoneType) > Mit anderen Worten: woher bekomme ich das NotImplementedType, > ohne type(NotImplemented) benutzen zu muessen? Siehe oben: i.d.R. solltest Du nicht auf NotImplementedType testen, sondern auf NotImplemented. > Antwort: aus > dem Modul types. Wenn es keine andere Moeglichkeit gibt, ist > das Modul nicht ueberfluessig. Mag sein. Du änderst aber das Thema: Deine ursprüngliche Frage war ja nach set und nicht nach NotImplementedType. Auch für den Test, den Du jetzt durchführen willst ("ist obj ein Exemplar von NotImplementedType") benötigt man das types-Modul nicht, weil NotImplemted ein Singleton ist. > Wenn dem so ist und kein SetType/FrozenSetType drin ist, be- > trachte ich das types-Modul als unvollstaendig, weil es einen > uniformen Zugriff auf alle Typen ueber diese Variablen nicht > mehr ermoeglicht. Es ist aber nicht der Zweck des types-Moduls, *alle* Typen zu enthalten. Es ist auch nicht realistisch anzunehmen, dass es das jemals könnte. Python-Bibliotheken können selber neue Typen definieren, aber selbst für die mit Python standardmäßig ausgelieferten Typen ist es nicht praktikabel, alle im types-Modul aufzuführen. Anbei eine Liste von Typen, die es in Python 2.5 gibt, aber nicht im types-Modul. Diese Liste ist nicht vollständig (schon weil es manche Typen nur auf manchen Systemen gibt). > Ob das tragisch ist, sei dahingestellt, aber es ist nicht > konsistent und nicht elegant. set und frozenset aufzunehmen würde es nicht konsistent machen. Es wäre tragisch, wenn es konsistent wäre, weil dann 'import types' praktisch die gesamte Python-Bibliothek importieren müsste. Ciao, Martin ('Carbon.File', 'Alias') ('Carbon.File', 'FInfo') ('Carbon.File', 'FSCatalogInfo') ('Carbon.File', 'FSRef') ('Carbon.File', 'FSSpec') ('MacOS', 'Error') ('_AE', 'AEDesc') ('_App', 'ThemeDrawingState') ('_CF', 'CFArrayRef') ('_CF', 'CFDataRef') ('_CF', 'CFDictionaryRef') ('_CF', 'CFMutableArrayRef') ('_CF', 'CFMutableDataRef') ('_CF', 'CFMutableDictionaryRef') ('_CF', 'CFMutableStringRef') ('_CF', 'CFStringRef') ('_CF', 'CFTypeRef') ('_CF', 'CFURLRef') ('_CG', 'CGContextRef') ('_CarbonEvt', 'EventHandlerCallRef') ('_CarbonEvt', 'EventHandlerRef') ('_CarbonEvt', 'EventHotKeyRef') ('_CarbonEvt', 'EventLoopRef') ('_CarbonEvt', 'EventLoopTimerRef') ('_CarbonEvt', 'EventQueueRef') ('_CarbonEvt', 'EventRef') ('_CarbonEvt', 'EventTargetRef') ('_Cm', 'Component') ('_Cm', 'ComponentInstance') ('_Ctl', 'Control') ('_Dlg', 'Dialog') ('_Drag', 'DragObj') ('_IBCarbon', 'IBNibRef') ('_List', 'List') ('_Menu', 'Menu') ('_Mlte', 'TXNFontMenuObject') ('_Mlte', 'TXNObject') ('_OSA', 'OSAComponentInstance') ('_Qd', 'BitMap') ('_Qd', 'GrafPort') ('_Qdoffs', 'GWorld') ('_Qt', 'IdleManager') ('_Qt', 'Media') ('_Qt', 'Movie') ('_Qt', 'MovieController') ('_Qt', 'SGOutput') ('_Qt', 'TimeBase') ('_Qt', 'Track') ('_Qt', 'UserData') ('_Res', 'Resource') ('_Snd', 'SPB') ('_Snd', 'SndChannel') ('_TE', 'TE') ('_Win', 'Window') ('__builtin__', 'CArgObject') ('__builtin__', 'Element') ('__builtin__', 'EncodingMap') ('__builtin__', 'MultibyteCodec') ('__builtin__', 'MultibyteIncrementalDecoder') ('__builtin__', 'MultibyteIncrementalEncoder') ('__builtin__', 'MultibyteStreamReader') ('__builtin__', 'MultibyteStreamWriter') ('__builtin__', 'StgDict') ('__builtin__', 'Struct') ('__builtin__', 'basestring') ('__builtin__', 'classmethod') ('__builtin__', 'deque_iterator') ('__builtin__', 'deque_reverse_iterator') ('__builtin__', 'enumerate') ('__builtin__', 'frozenset') ('__builtin__', 'iterparse') ('__builtin__', 'property') ('__builtin__', 'reversed') ('__builtin__', 'set') ('__builtin__', 'sqlite3Node') ('__builtin__', 'staticmethod') ('__builtin__', 'super') ('__builtin__', 'weakref') ('_csv', 'Dialect') ('_csv', 'Error') ('_csv', 'reader') ('_csv', 'writer') ('_ctypes', 'Array') ('_ctypes', 'ArrayType') ('_ctypes', 'CField') ('_ctypes', 'CFuncPtr') ('_ctypes', 'CFuncPtrType') ('_ctypes', 'PointerType') ('_ctypes', 'SimpleType') ('_ctypes', 'StructType') ('_ctypes', 'Structure') ('_ctypes', 'Union') ('_ctypes', 'UnionType') ('_ctypes', '_CData') ('_ctypes', '_Pointer') ('_ctypes', '_SimpleCData') ('_curses', 'error') ('_curses_panel', 'error') ('_hashlib', 'HASH') ('_lsprof', 'Profiler') ('_lsprof', 'profiler_entry') ('_lsprof', 'profiler_subentry') ('_random', 'Random') ('_sha256', 'sha224') ('_sha256', 'sha256') ('_sha512', 'sha384') ('_sha512', 'sha512') ('_testcapi', 'error') ('_types', 'Helper') ('array', 'array') ('audioop', 'error') ('autoGIL', 'AutoGILError') ('binascii', 'Error') ('binascii', 'Incomplete') ('bsddb', 'error') ('cPickle', 'BadPickleGet') ('cPickle', 'PickleError') ('cPickle', 'Pickler') ('cPickle', 'PicklingError') ('cPickle', 'UnpickleableError') ('cPickle', 'Unpickler') ('cPickle', 'UnpicklingError') ('cStringIO', 'StringI') ('cStringIO', 'StringO') ('codecs', 'BufferedIncrementalDecoder') ('codecs', 'BufferedIncrementalEncoder') ('codecs', 'CodecInfo') ('codecs', 'IncrementalDecoder') ('codecs', 'IncrementalEncoder') ('collections', 'defaultdict') ('collections', 'deque') ('copy', 'Error') ('ctypes', 'ArgumentError') ('datetime', 'date') ('datetime', 'datetime') ('datetime', 'time') ('datetime', 'timedelta') ('datetime', 'tzinfo') ('dbm', 'error') ('distutils.errors', 'CCompilerError') ('distutils.errors', 'CompileError') ('distutils.errors', 'DistutilsArgError') ('distutils.errors', 'DistutilsClassError') ('distutils.errors', 'DistutilsError') ('distutils.errors', 'DistutilsExecError') ('distutils.errors', 'DistutilsFileError') ('distutils.errors', 'DistutilsGetoptError') ('distutils.errors', 'DistutilsInternalError') ('distutils.errors', 'DistutilsModuleError') ('distutils.errors', 'DistutilsOptionError') ('distutils.errors', 'DistutilsPlatformError') ('distutils.errors', 'DistutilsSetupError') ('distutils.errors', 'DistutilsTemplateError') ('distutils.errors', 'LibError') ('distutils.errors', 'LinkError') ('distutils.errors', 'PreprocessError') ('distutils.errors', 'UnknownFileError') ('dl', 'error') ('encodings', 'CodecRegistryError') ('encodings.ascii', 'IncrementalDecoder') ('encodings.ascii', 'IncrementalEncoder') ('exceptions', 'ArithmeticError') ('exceptions', 'AssertionError') ('exceptions', 'AttributeError') ('exceptions', 'BaseException') ('exceptions', 'DeprecationWarning') ('exceptions', 'EOFError') ('exceptions', 'EnvironmentError') ('exceptions', 'Exception') ('exceptions', 'FloatingPointError') ('exceptions', 'FutureWarning') ('exceptions', 'GeneratorExit') ('exceptions', 'IOError') ('exceptions', 'ImportError') ('exceptions', 'ImportWarning') ('exceptions', 'IndentationError') ('exceptions', 'IndexError') ('exceptions', 'KeyError') ('exceptions', 'KeyboardInterrupt') ('exceptions', 'LookupError') ('exceptions', 'MemoryError') ('exceptions', 'NameError') ('exceptions', 'NotImplementedError') ('exceptions', 'OSError') ('exceptions', 'OverflowError') ('exceptions', 'PendingDeprecationWarning') ('exceptions', 'ReferenceError') ('exceptions', 'RuntimeError') ('exceptions', 'RuntimeWarning') ('exceptions', 'StandardError') ('exceptions', 'StopIteration') ('exceptions', 'SyntaxError') ('exceptions', 'SyntaxWarning') ('exceptions', 'SystemError') ('exceptions', 'SystemExit') ('exceptions', 'TabError') ('exceptions', 'TypeError') ('exceptions', 'UnboundLocalError') ('exceptions', 'UnicodeDecodeError') ('exceptions', 'UnicodeEncodeError') ('exceptions', 'UnicodeError') ('exceptions', 'UnicodeTranslateError') ('exceptions', 'UnicodeWarning') ('exceptions', 'UserWarning') ('exceptions', 'ValueError') ('exceptions', 'Warning') ('exceptions', 'ZeroDivisionError') ('functools', 'partial') ('grp', 'struct_group') ('hotshot', 'ProfilerError') ('imageop', 'error') ('imp', 'NullImporter') ('itertools', '_grouper') ('itertools', 'chain') ('itertools', 'count') ('itertools', 'cycle') ('itertools', 'dropwhile') ('itertools', 'groupby') ('itertools', 'ifilter') ('itertools', 'ifilterfalse') ('itertools', 'imap') ('itertools', 'islice') ('itertools', 'izip') ('itertools', 'repeat') ('itertools', 'starmap') ('itertools', 'takewhile') ('itertools', 'tee') ('itertools', 'tee_dataobject') ('locale', 'Error') ('nis', 'error') ('operator', 'attrgetter') ('operator', 'itemgetter') ('parser', 'ParserError') ('posix', 'stat_result') ('posix', 'statvfs_result') ('resource', 'error') ('resource', 'struct_rusage') ('rgbimg', 'error') ('select', 'error') ('site', 'Quitter') ('site', '_Helper') ('site', '_Printer') ('socket', 'error') ('socket', 'gaierror') ('socket', 'herror') ('socket', 'sslerror') ('socket', 'timeout') ('sqlite3', 'Cache') ('sqlite3', 'Connection') ('sqlite3', 'Cursor') ('sqlite3', 'DataError') ('sqlite3', 'DatabaseError') ('sqlite3', 'Error') ('sqlite3', 'IntegrityError') ('sqlite3', 'InterfaceError') ('sqlite3', 'InternalError') ('sqlite3', 'NotSupportedError') ('sqlite3', 'OperationalError') ('sqlite3', 'PrepareProtocol') ('sqlite3', 'ProgrammingError') ('sqlite3', 'Row') ('sqlite3', 'Statement') ('sqlite3', 'Warning') ('sre_constants', 'error') ('string', 'Template') ('string', '_TemplateMetaclass') ('struct', 'error') ('termios', 'error') ('time', 'struct_time') ('warnings', '_OptionError') ('xml.parsers.expat', 'ExpatError') ('zipimport', 'ZipImportError') ('zipimport', 'zipimporter') ('zlib', 'error') From gherman at darwin.in-berlin.de Sun Feb 11 16:38:48 2007 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Sun, 11 Feb 2007 16:38:48 +0100 Subject: [Python-de] types.SetType In-Reply-To: <45CF29E6.709@v.loewis.de> References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> <45CF29E6.709@v.loewis.de> Message-ID: Martin v. Löwis: > [...] Eine abschließende Bemerkung dazu von meiner Seite: In 2.5 sind types.GetSetDescriptorType und types.MemberDescriptorType neu, also kann das Modul nicht unnoetig oder veraltet sein. Mein Beispiel mit NotImplemented war nur ein Beispiel. Von externen Typen, auch sol- chen in der Standard-Bibliothek, war nie die Rede. Und dafuer, dass zwei, immerhin eingebaute, (Daten-) Typen (set/frozenset) in types nicht vorhanden sind, sehe ich weiterhin keinen anderen Grund als den, dass sie vergessen wurden. Gruss, Dinu From martin at v.loewis.de Sun Feb 11 19:06:27 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Sun, 11 Feb 2007 19:06:27 +0100 Subject: [Python-de] types.SetType In-Reply-To: References: <45CCCF97.6020503@web.de> <592790e1136bbf36cf408dc4fe2644f9@darwin.in-berlin.de> <45CEE165.7070205@v.loewis.de> <45CF29E6.709@v.loewis.de> Message-ID: <45CF5B23.2000303@v.loewis.de> > Und dafuer, dass > zwei, immerhin eingebaute, (Daten-) Typen (set/frozenset) in types > nicht vorhanden sind, sehe ich weiterhin keinen anderen Grund als > den, dass sie vergessen wurden. Darauf eine abschließende Antwort: Sei versichert, dass das nicht vergessen wurde, sondern absichtlich im types-Modul kein Alias angelegt wurde. Ich war dabei. Ein paar Belege dafür: - In PEP 348 heißt es (als Grund für die Ablehnung des PEPs): A centralized repository of type names was a mistake. Neither the "types" nor "new" modules should be carried forward to Python 3.0. Using two sets of names for the same objects is redundant and confusing. - http://mail.python.org/pipermail/python-dev/2002-May/024336.html OK, so let me explain why I'm against adding new stuff to types.py. I'm against adding new features to anything that's (about to) being deprecated. The addition of new features sends the wrong message: it suggests that the module is in active use, recommended for use, supported, maintained, etc. When someone finds that types.py has no name for the Boolean type, maybe this will cause them to realize that it's being deprecated and that in the long run (with emphasis on long) it's going away. Ciao, Martin From mmueller at python-academy.de Mon Feb 12 00:01:37 2007 From: mmueller at python-academy.de (Mike =?iso-8859-1?Q?M=FCller?=) Date: Mon, 12 Feb 2007 00:01:37 +0100 Subject: [Python-de] Python-Stammtisch in Leipzig, 13.02.07, 20:00 Uhr Message-ID: <7.0.1.0.0.20070211234100.01cae120@python-academy.de> ========================= Leipzig Python User Group ========================= Stammtisch am 13.02.2007 ------------------------- Wir treffen uns am 13.02.2007 um 20:00 Uhr wieder im Schulungszentrum der Python Academy in Leipzig (http://www.python-academy.de/Schulungszentrum/anfahrt.html). Unser Hauptthema ist diesmal Pyrex (http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex). Mit Pyrex wird das Schreiben von Pythonerweiterungen stark vereinfacht. Mitglieder der User Group haben mit Pyrex eine Verringerung der Laufzeit um den Faktor zehn und mehr erreicht. Natürlich wird es zusätzlich wieder Diskussionen zu anderen Python-Themen geben. Für das leibliche Wohl wird gesorgt. Wir bitten um kurze Anmeldung per e-mail an: info at python-academy.de An den Treffen der Python Anwendergruppe kann jeder teilnehmen, der Interesse an Python hat, die Sprache bereits nutzt oder nutzen möchte. Die Arbeitssprachen des Treffens ist Deutsch. Englisch sprechende Python-Enthusiasten sind trotzdem herzlich eingeladen. Wir übersetzen gern. Aktuelle Informationen zu den Treffen sind immer unter http://www.python-academy.de/User-Group/index.html zu finden. From deets at web.de Mon Feb 12 13:36:18 2007 From: deets at web.de (Diez B. Roggisch) Date: Mon, 12 Feb 2007 13:36:18 +0100 Subject: [Python-de] types.SetType In-Reply-To: <200702102052.57985.hpj@urpla.net> References: <45CCDC62.7000208@web.de> <200702102052.57985.hpj@urpla.net> Message-ID: <200702121336.18688.deets@web.de> Hi Pete, > > Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, > wenn man sich eine der Evaluierungen spart: > if type(obj) == types.StringType: ... Aber ist type(obj) == str denn wirklich langsamer? Es wird erst lokal aufgeloest, danach global - genauso wie modulnamen, oder nicht? Womit der lookup direkt gelingt, wohingege ja noch "StringType" in types aufgeloest werden muss. Diez From sschwarzer at sschwarzer.net Mon Feb 12 17:55:52 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Mon, 12 Feb 2007 17:55:52 +0100 Subject: [Python-de] types.SetType In-Reply-To: <200702121336.18688.deets@web.de> References: <45CCDC62.7000208@web.de> <200702102052.57985.hpj@urpla.net> <200702121336.18688.deets@web.de> Message-ID: <45D09C18.50304@sschwarzer.net> Hallo Hans-Peter, Hallo Diez, On 2007-02-12 13:36, Diez B. Roggisch wrote: >> Hmm, nicht ganz, in "hot paths" kann es der Performance zuträglich sein, >> wenn man sich eine der Evaluierungen spart: >> if type(obj) == types.StringType: ... ich glaube, Python wäre nicht Python, wenn das für die Aufname eines SetType in types eine Rolle spielen würde. ;-) > Aber ist > > type(obj) == str > > denn wirklich langsamer? Es wird erst lokal aufgeloest, danach global - > genauso wie modulnamen, oder nicht? Womit der lookup direkt gelingt, > wohingege ja noch "StringType" in types aufgeloest werden muss. Wozu vermuten, wenn man messen kann? :-) Folgende Messwerte sind mit Python 2.5 bestimmt. Es geht mir nur um die Relationen, deshalb verzichte ich auf die Angabe von Rechnerdaten. Der Rechner war während der Messungen bei ca. 0 % Auslastung, abgesehen natürlich von den Messungen selbst. python /usr/lib/python2.5/timeit.py -r 10 -s "import types; o = ''" "type(o) == types.StringType" (bzw. anderer Code entsprechend eingesetzt) Den timeit-Lauf habe ich jeweils mehrmals wiederholt und, wie in der Doku empfohlen, den kleinsten Wert genommen. type(o) == types.StringType 0.571 usec type(o) is types.StringType 0.523 usec type(o) == str 0.449 usec type(o) is str 0.405 usec isinstance(o, types.StringType) 0.519 usec isinstance(o, str) 0.412 usec Der Vergleich mit "is" ist erwartungsgemäß schneller als mit "==", da nur ein Zeiger-Vergleich durchgeführt werden muss. "isinstance(o, str)" ist praktisch genau so schnell wie "type(o) is str". In den meisten Fällen will man wohl die abgeleiteten Klassen mit erwischen, so dass aus meiner Sicht auch unter dem Geschwindigkeits-Aspekt nichts gegen isinstance spricht. Lookups abkürzen ---------------- Ich habe auch getestet, wie sich die Erstellung eines Namens im lokalen Namensraum auswirkt. python /usr/lib/python2.5/timeit.py -r 10 -s "from test import str_global" "str_global()" mit def str_global(): o = "" for i in xrange(1000): isinstance(o, str) def str_lokal(): lstr = str o = "" for i in xrange(1000): isinstance(o, lstr) str_global 433 usec str_lokal 371 usec Man kann das "Nachschlagen" des str-Typs durch Anlegen eines lokalen Alias-Namens also potenziell deutlich beschleunigen. Abschließend möchte ich darum bitten, nicht zu Tempo-Fanatikern zu werden; die meisten Tuning-Maßnahmen sind wohl unnötig. :-) In den obigen Beispielen geht es um Laufzeiten von einer halben Millisekunde! Bei der Gelegenheit etwas "Eigenwerbung": http://sschwarzer.com/download/optimization_europython2006.pdf Beschleunigte Grüße ;-) Stefan From chris.arndt at web.de Tue Feb 13 12:22:43 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Tue, 13 Feb 2007 12:22:43 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= Message-ID: <45D19F83.2070201@web.de> Hallo liebe Leute, das nächste Treffen der Python User Group Köln findet MORGEN statt: Datum: 14.2.2007 Uhrzeit: 18:30 Uhr Ort: Pool 0.14, Benutzerrechenzentrum (RRZK-B) der Universität Köln, Berrenrather Str. 136, 50937 Köln Nähere Informationen (Vortragsprogramm, Wegbeschreibung, etc.) findet man hier: http://wiki.python.de/User_Group_K%C3%B6ln#Termine Wir laden alle Python-Begeisterten aus der Umgebung ein, ob Entwickler, Anwender oder einfach nur neugierig, zu diesem Treffen zu kommen! Sorry, für die späte Ankündigung. Christopher Arndt From mathias.uebel at meeloon.de Tue Feb 13 13:44:45 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Tue, 13 Feb 2007 13:44:45 +0100 Subject: [Python-de] =?iso-8859-15?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-15?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D19F83.2070201@web.de> References: <45D19F83.2070201@web.de> Message-ID: <45D1B2BD.2070406@meeloon.de> Christopher Arndt schrieb: > Hallo liebe Leute, > > das nächste Treffen der Python User Group Köln findet MORGEN statt: > > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? Grusz From sschwarzer at sschwarzer.net Tue Feb 13 14:52:43 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Tue, 13 Feb 2007 14:52:43 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1B2BD.2070406@meeloon.de> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> Message-ID: <45D1C2AB.4040808@sschwarzer.net> Hallo Mathias, On 2007-02-13 13:44, Mathias Uebel wrote: > Christopher Arndt schrieb: >> das nächste Treffen der Python User Group Köln findet MORGEN statt: >> > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. und im Osten, nicht vergessen! ;-) http://python.net/pipermail/python-de/2007q1/008011.html > Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? Inzwischen gibt es wieder einen Berliner Stammtisch, das ging hier auch über die Liste, siehe http://python.net/pipermail/python-de/2007q1/008021.html Viel Spaß! Viele Grüße Stefan From stephan.diehl at gmx.net Tue Feb 13 14:15:20 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Tue, 13 Feb 2007 14:15:20 +0100 Subject: [Python-de] =?iso-8859-1?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-1?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1B2BD.2070406@meeloon.de> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> Message-ID: <45D1B9E8.8020900@gmx.net> Hallo Mathias, Mathias Uebel wrote: > Christopher Arndt schrieb: >> Hallo liebe Leute, >> >> das nächste Treffen der Python User Group Köln findet MORGEN statt: >> >> > Ich gebe zu: Mit Neid muss ich von den Treffen im Süden und Westen lesen. > Darum meine Frage: Welche Aktivitäten gibt es in und um Berlin? da muss dir unser berliner treffen vor 10 Tagen durch die Lappen gegangen sein. Wir haben uns aber ganz fest vorgenommen, von jetzt ab regelmaessiger ein Treffen zu veranstalten. Am besten abonierst du mal http://starship.python.net/cgi-bin/mailman/listinfo/python-berlin > > Grusz Stephan From mathias.uebel at meeloon.de Tue Feb 13 16:44:23 2007 From: mathias.uebel at meeloon.de (Mathias Uebel) Date: Tue, 13 Feb 2007 16:44:23 +0100 Subject: [Python-de] =?iso-8859-15?q?=5BAnk=FCndigung=5D_Treffen_der_PUG_K?= =?iso-8859-15?q?=F6ln_am_14=2E02=2E2007?= In-Reply-To: <45D1C2AB.4040808@sschwarzer.net> References: <45D19F83.2070201@web.de> <45D1B2BD.2070406@meeloon.de> <45D1C2AB.4040808@sschwarzer.net> Message-ID: <45D1DCD7.3080806@meeloon.de> Stefan Schwarzer schrieb: > [...] > > und im Osten, nicht vergessen! ;-) > Ja, schön. Wenn ich mal in der Gegend bin, schau ich mal rein! > [...] > Inzwischen gibt es wieder einen Berliner Stammtisch, das > ging hier auch über die Liste, siehe > http://python.net/pipermail/python-de/2007q1/008021.html > Hey, cool. Danke für die Tips! Gruß From steve at syso.ch Wed Feb 14 19:37:00 2007 From: steve at syso.ch (Stefan Mallepell) Date: Wed, 14 Feb 2007 19:37:00 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? Message-ID: <45D356CC.7040008@syso.ch> Hallo Ich sollte noch ultradringend eine Schnittstelle in ein ERP System erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir win32com.client Probleme. Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip top. Vgl. PythonWin Output: * >>> import win32com.client * >>> o = win32com.client.Dispatch("OLE_VK.VK") Das Aufrufen von Methoden funktioniert: * >>> o.SetClient(7777) * True * >>> o.SetApplicationID(6) * True * >>> o.NewHeader * > Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties keine Werte zuweisen. Ich erhalte immer einen Syntax Error ... * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 * Traceback ( File "", line 1 * SyntaxError: can't assign to function call (, * line 1) Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst noch besonders beachten (Werteübergabe von Typ Integer, String, Currency, Boolean, DateTime, Variant, Double). Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin ich mega froh ;-) Danke und Gruss Stefan # The method SetAsBooleanbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), (8, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsBooleanbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), (3, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), (8, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), (3, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), (8, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), (3, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), (8, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), (3, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), (8, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), (3, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), (8, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), (3, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), (8, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), (3, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetTextDetail is actually a property, but must be used as a method to correctly pass the arguments def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, arg1=defaultUnnamedArg): return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), (8, 1)),_dtxttyp , arg1) # The method SetTextHeader is actually a property, but must be used as a method to correctly pass the arguments def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), (3, 1), (8, 1)),_htxttyp , _hdoktyp, arg2) From robert at redcor.ch Wed Feb 14 20:34:27 2007 From: robert at redcor.ch (robert rottermann) Date: Wed, 14 Feb 2007 20:34:27 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D356CC.7040008@syso.ch> References: <45D356CC.7040008@syso.ch> Message-ID: <45D36443.9060509@redcor.ch> versuch mal o.Table.AsCurrencybyName("DKO","AUF_NR", 268) gruss rr Stefan Mallepell wrote: > Hallo > > Ich sollte noch ultradringend eine Schnittstelle in ein ERP System > erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir > win32com.client Probleme. > > Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client > aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip > top. Vgl. PythonWin Output: > > * >>> import win32com.client > * >>> o = win32com.client.Dispatch("OLE_VK.VK") > > Das Aufrufen von Methoden funktioniert: > > * >>> o.SetClient(7777) > * True > * >>> o.SetApplicationID(6) > * True > * >>> o.NewHeader > * * Verkauf.IVK instance at 0x19950648>> > > Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. > Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties > keine Werte zuweisen. Ich erhalte immer einen Syntax Error ... > > * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 > * Traceback ( File "", line 1 > * SyntaxError: can't assign to function call (, > * line 1) > > Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst > noch besonders beachten (Werteübergabe von Typ Integer, String, > Currency, Boolean, DateTime, Variant, Double). > > Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, > dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin > ich mega froh ;-) > > Danke und Gruss > Stefan > > > > > # The method SetAsBooleanbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), > (8, 1), (11, 1)),_tableID > , _fldID, arg2) > > # The method SetAsBooleanbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), > (3, 1), (11, 1)),_tableID > , _fldID, arg2) > > # The method SetAsCurrencybyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), > (8, 1), (6, 1)),_tableID > , _fldID, arg2) > > # The method SetAsCurrencybyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), > (3, 1), (6, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDateTimebyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), > (8, 1), (7, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDateTimebyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), > (3, 1), (7, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDoublebyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), > (8, 1), (5, 1)),_tableID > , _fldID, arg2) > > # The method SetAsDoublebyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), > (3, 1), (5, 1)),_tableID > , _fldID, arg2) > > # The method SetAsIntegerbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), > (8, 1), (3, 1)),_tableID > , _fldID, arg2) > > # The method SetAsIntegerbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), > (3, 1), (3, 1)),_tableID > , _fldID, arg2) > > # The method SetAsStringbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), > (8, 1), (8, 1)),_tableID > , _fldID, arg2) > > # The method SetAsStringbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), > (3, 1), (8, 1)),_tableID > , _fldID, arg2) > > # The method SetAsVariantbyName is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), > (8, 1), (12, 1)),_tableID > , _fldID, arg2) > > # The method SetAsVariantbyNo is actually a property, but must be > used as a method to correctly pass the arguments > def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), > (3, 1), (12, 1)),_tableID > , _fldID, arg2) > > # The method SetTextDetail is actually a property, but must be used > as a method to correctly pass the arguments > def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, > arg1=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), > (8, 1)),_dtxttyp > , arg1) > > # The method SetTextHeader is actually a property, but must be used > as a method to correctly pass the arguments > def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, > _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): > return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), > (3, 1), (8, 1)),_htxttyp > , _hdoktyp, arg2) > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > > -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : robert.vcf Dateityp : text/x-vcard Dateigröße : 200 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070214/9b060559/attachment.vcf From steve at syso.ch Thu Feb 15 12:29:34 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 12:29:34 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D36443.9060509@redcor.ch> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> Message-ID: <45D4441E.5080001@syso.ch> Hoi Robert > versuch mal > o.Table.AsCurrencybyName("DKO","AUF_NR", 268) Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl unten: * >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) * Traceback (most recent call last): * File "", line 1, in * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given) Gruss Stefan From Helm.volker at gmx.de Thu Feb 15 13:20:08 2007 From: Helm.volker at gmx.de (Volker Helm) Date: Thu, 15 Feb 2007 13:20:08 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D4441E.5080001@syso.ch> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> <45D4441E.5080001@syso.ch> Message-ID: <20070215122008.225550@gmx.net> Hi, warum fragst Du nicht mal diejenigen, die die Klassen entwickelt haben. Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun. Wo hast Du den die Klasse o.table initialisiert, vielleicht liegt dort ein Fehler vor, dass die entsprechende ID dann genommen wird. Leider kenne ich Eurer System nicht, zu wenig Infos. Bis dann, Volker -------- Original-Nachricht -------- Datum: Thu, 15 Feb 2007 12:29:34 +0100 Von: Stefan Mallepell An: python-de at python.net CC: Betreff: Re: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? > Hoi Robert > > > versuch mal > > o.Table.AsCurrencybyName("DKO","AUF_NR", 268) > > Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl > unten: > > * >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) > * Traceback (most recent call last): > * File "", line 1, in > * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given) > > Gruss > Stefan > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de -- Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten Browser-Versionen downloaden: http://www.gmx.net/de/go/browser From bh at intevation.de Thu Feb 15 13:38:59 2007 From: bh at intevation.de (Bernhard Herzog) Date: Thu, 15 Feb 2007 13:38:59 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D356CC.7040008@syso.ch> (Stefan Mallepell's message of "Wed\, 14 Feb 2007 19\:37\:00 +0100") References: <45D356CC.7040008@syso.ch> Message-ID: Stefan Mallepell writes: > * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 > * Traceback ( File "", line 1 > * SyntaxError: can't assign to function call (, > * line 1) > > Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst > noch besonders beachten (Werteübergabe von Typ Integer, String, > Currency, Boolean, DateTime, Variant, Double). Hast Du es mal mit o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268) probiert. Die SetAsCurrencybyName Methode gibt es ja nach dem, was Du aus dem INterface zitierst: > # The method SetAsCurrencybyName is actually a property, but must > be used as a method to correctly pass the arguments > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): Bernhard -- Intevation GmbH http://intevation.de/ Skencil http://skencil.org/ Thuban http://thuban.intevation.org/ From steve at syso.ch Thu Feb 15 13:50:24 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 13:50:24 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <20070215122008.225550@gmx.net> References: <45D356CC.7040008@syso.ch> <45D36443.9060509@redcor.ch> <45D4441E.5080001@syso.ch> <20070215122008.225550@gmx.net> Message-ID: <45D45710.6010808@syso.ch> Hi Volker Die Klasse ist ein COM-Server Objekt, welche mit win32com.client verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts als Methoden dargestellt werden. > Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun. Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt - sorry. Das andere Property ergibt aber den selben Fehler. Mein Problem ist, dass Python untenstehendes als Methode und nicht als Property warnimmt. Das COM Objekt (hier "o") das aber als Property versteht, welchem man einen Wert zuweisen kann / muss. Z.B. o.Table.AsIntegerbyName("DKO","AUF_NR") = 268 Was aber gegen den Python Syntax ist ... Liebe Grüsse Stefan PS.: vgl auch erstes Mail in diesem Thread für weitere Infos From steve at syso.ch Thu Feb 15 14:08:39 2007 From: steve at syso.ch (Stefan Mallepell) Date: Thu, 15 Feb 2007 14:08:39 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: References: <45D356CC.7040008@syso.ch> Message-ID: <45D45B57.3070007@syso.ch> Hoi Bernhard > o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268) > def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, > _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): Wie konnte ich nur so blind sein! Ich habe mir gestern wirklich die Haare gerauft und dabei hätte ich nur das Interface sauber lesen müssen ... Tja, habe jetzt einen tollen Umweg mit Zwischenfiles und VBS zusammengestrickt - was ich natürlich jetzt sofort einstampfen werde und es sauber und nett in Python machen ... Danke für die Hilfe! Stefan From deets at web.de Thu Feb 15 14:13:33 2007 From: deets at web.de (Diez B. Roggisch) Date: Thu, 15 Feb 2007 14:13:33 +0100 Subject: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ? In-Reply-To: <45D45710.6010808@syso.ch> References: <45D356CC.7040008@syso.ch> <20070215122008.225550@gmx.net> <45D45710.6010808@syso.ch> Message-ID: <200702151413.33633.deets@web.de> > Die Klasse ist ein COM-Server Objekt, welche mit win32com.client > verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts > als Methoden dargestellt werden. > > > Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit > > AsIntegerbyName zu tun. > > Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt > - sorry. Das andere Property ergibt aber den selben Fehler. > > Mein Problem ist, dass Python untenstehendes als Methode und nicht als > Property warnimmt. Das COM Objekt (hier "o") das aber als Property > versteht, welchem man einen Wert zuweisen kann / muss. Z.B. > > o.Table.AsIntegerbyName("DKO","AUF_NR") = 268 > > Was aber gegen den Python Syntax ist ... Meine COM-Zeiten sind leider schon eine Weile her - darum kann ich nicht wirklich helfen fuerchte ich. Aber aus reinem Interesse: wie deklariert man denn so ein parametrisiertes Property, zB in VB, und wie greift man dann drauf zu? Diez From langer.markus at gmail.com Mon Mar 5 20:23:11 2007 From: langer.markus at gmail.com (Markus Langer) Date: Mon, 05 Mar 2007 21:23:11 +0100 Subject: [Python-de] verzeichnisbaum einlesesn Message-ID: <45EC7C2F.5060901@gmail.com> hallo leute, ich würde gerne den verzeichnisbaum meiner kompletten festplatte einlesesen...ich kenn zwar die befehle, aber weiter wie über die erste ebene komme ich nicht ich derdenke es mir nicht zusammen danke im voraus markus langer From lists at andreas-jung.com Mon Mar 5 21:04:10 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Mon, 05 Mar 2007 22:04:10 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <45EC7C2F.5060901@gmail.com> References: <45EC7C2F.5060901@gmail.com> Message-ID: --On 5. März 2007 21:23:11 +0100 Markus Langer wrote: > hallo leute, > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > erste ebene komme ich nicht ich derdenke es mir nicht zusammen os.walk() ist Dein Freund. -aj -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070305/51b19c90/attachment.pgp From hpj at urpla.net Mon Mar 5 21:05:32 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Mon, 5 Mar 2007 22:05:32 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <45EC7C2F.5060901@gmail.com> References: <45EC7C2F.5060901@gmail.com> Message-ID: <200703052205.32708.hpj@urpla.net> Am Montag, 5. März 2007 21:23 schrieb Markus Langer: > hallo leute, > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > erste ebene komme ich nicht ich derdenke es mir nicht zusammen Weniger Drogen nehmen und Doku lesen: http://docs.python.org/lib/os-file-dir.html ganz unten.. SCR, Pete From langer.markus at gmail.com Tue Mar 6 10:07:39 2007 From: langer.markus at gmail.com (markus langer) Date: Tue, 6 Mar 2007 11:07:39 +0100 Subject: [Python-de] verzeichnisbaum einlesesn In-Reply-To: <200703052205.32708.hpj@urpla.net> References: <45EC7C2F.5060901@gmail.com> <200703052205.32708.hpj@urpla.net> Message-ID: <8a0e0ccf0703060207y290f93bj9780e2b2fb1b6754@mail.gmail.com> meine unwissenheit hat nichts mit drogenkonsum gemein, sondern eher mit hochgebirgsstumpfsin ;-) lg. markus langer On 3/5/07, Hans-Peter Jansen wrote: > > Am Montag, 5. März 2007 21:23 schrieb Markus Langer: > > hallo leute, > > > > ich würde gerne den verzeichnisbaum meiner kompletten festplatte > > einlesesen...ich kenn zwar die befehle, aber weiter wie über die > > erste ebene komme ich nicht ich derdenke es mir nicht zusammen > > Weniger Drogen nehmen und Doku lesen: > http://docs.python.org/lib/os-file-dir.html ganz unten.. > > SCR, > Pete > > _______________________________________________ > python-de maillist - python-de at python.net > http://python.net/mailman/listinfo/python-de > -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: http://python.net/pipermail/python-de/attachments/20070306/c4aeb1fd/attachment.htm From venthur at debian.org Tue Mar 6 11:33:34 2007 From: venthur at debian.org (Bastian Venthur) Date: Tue, 06 Mar 2007 12:33:34 +0100 Subject: [Python-de] =?iso-8859-15?q?E-Mailclient_=F6ffnen?= Message-ID: Hallo, weis jemand von euch ob es irgendwie möglich ist innerhalb von Python den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten könnte. Zielplattform ist Linux. Schöne Grüße, Bastian -- Bastian Venthur http://venthur.de Debian Developer venthur at debian org From lists at andreas-jung.com Tue Mar 6 11:38:45 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Tue, 06 Mar 2007 12:38:45 +0100 Subject: [Python-de] =?utf-8?q?E-Mailclient_=C3=B6ffnen?= In-Reply-To: References: Message-ID: <4ED5B5AD8ED1AAEA8956383E@suxmac2.local> --On 6. März 2007 12:33:34 +0100 Bastian Venthur wrote: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Das kann schon nicht klappen, weil es zu viele verschiedenen Email-Clients gibt, die unterschiedlich angesteuert werden wollen. Mein Tipp: vergiss es. -aj -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070306/b6c8989f/attachment.pgp From kristian at zimmer428.net Tue Mar 6 11:42:19 2007 From: kristian at zimmer428.net (Kristian Rink) Date: Tue, 6 Mar 2007 12:42:19 +0100 Subject: [Python-de] =?utf-8?q?E-Mailclient_=C3=B6ffnen?= In-Reply-To: References: Message-ID: <20070306124219.7dfaafcc@n428> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Bastian; [Bastian Venthur @ Tue, 06 Mar 2007 12:33:34 +0100] > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. Ohne es selbst probiert zu haben, ein paar Ideen hierzu: - - Der "Standard-Mail-Client", der in Desktop-Umgebungen wie KDE oder GNOME registriert ist, ist spezifisch für ebendiese DE. Insofern würde ich dort versuchen, die entsprechenden Python-Bindings für KDE / GNOME zu Hilfe zu nehmen und zu hoffen, daß dort solcherartige Funktionalität beinhaltet ist. - - Ansonsten: Wenn Du einen MUA hast, der via Kommandozeile derartige Parameter entgegennimmt, kannst Du ja auch "einfach nur" einen derartigen System-Aufruf (spawn()?) absetzen: kr at n428:~> claws-mail --help Aufruf: claws-mail [OPTION]... --compose [Adresse] öffnet Verfassenfenster --subscribe [uri] abonniere die angegebene URI wenn es möglich ist --attach file1 [file2]... öffnet Verfassenfenster mit der/den angegebenen Datei/-en als Anhang --receive empfängt neue Nachrichten --receive-all empfängt neue Nachrichten von allen Konten --send sendet alle zwischengespeicherten Nachrichten --status [Ordner]... zeigt die Anzahl neuer Nachrichten Cheers, Kristian - -- Kristian Rink * http://zimmer428.net * http://flickr.com/photos/z428/ jab: kawazu at jabber.ccc.de * icq: 48874445 * fon: ++49 176 2447 2771 "One dreaming alone, it will be only a dream; many dreaming together is the beginning of a new reality." (Hundertwasser) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFF7VOicxBAPOA1m6wRAkm7AJ0QNilOJ7VyS5A55mLY74S3UKjmdACfZ0Vd ZfzqqGhp4IV+3nzXoEC5su0= =vXaU -----END PGP SIGNATURE----- From flori at n-schlachter.de Tue Mar 6 11:47:52 2007 From: flori at n-schlachter.de (Florian Schlachter) Date: Tue, 06 Mar 2007 12:47:52 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <45ED54E8.60401@n-schlachter.de> Bastian Venthur schrieb: > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. [...] > Zielplattform ist Linux. Unter Windows geht es zumindest mit dem Default E-Mail-Client, wenn du folgenden Befehl ausführen lässt: mailto:te at st.tld?subject=Kleiner Betreff&body=The body goes here... Alle gängigen E-Mail-Clients (sofern graphisch, z. B. Thunderbird, KMail, etc.) sollten zumindest auf diese Syntax anspringen ... möglich, dass es unter Linux auch funktioniert, wenn du die obige Zeile von dem zuständigen DE ausführen lässt; das sollte auch die mailto:-Verknüpfung auflösen und den Default E-Mail-Client öffnen. HTH Florian From deets at web.de Tue Mar 6 11:54:56 2007 From: deets at web.de (Diez B. Roggisch) Date: Tue, 6 Mar 2007 12:54:56 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <200703061254.57252.deets@web.de> On Tuesday 06 March 2007 12:33, Bastian Venthur wrote: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? > > Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail > verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich > abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten > könnte. > > Zielplattform ist Linux. Falls du garantieren kannst das KMail vorhanden ist, _sollte_ es sich einbetten lassen in Qt, aehnlich wie das ja auch mit der KHTML-Komponente klappt. Alternativ eventuell auch ueber dcop fersteuern. Ist aber alles nicht besonders einfach, und wie robust es wird kann ich auch nicht einschaetzen. Diez From deets at web.de Tue Mar 6 11:58:28 2007 From: deets at web.de (Diez B. Roggisch) Date: Tue, 6 Mar 2007 12:58:28 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <200703061258.29139.deets@web.de> On Tuesday 06 March 2007 12:33, Bastian Venthur wrote: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? > > Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail > verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich > abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten > könnte. Ich muss meinen anderen post korrigieren - es ist total einfach: dcop kmail KMailIface openComposer a b c d e 0 Oeffnet bei mir ein Email-fenster, mit den vorausgefuellten werten wie man sie mittels dcop kmail KMailIface ermitteln kann. Also - wenn du KMail als existent & konfiguriert vorraussetzen kannst, ist das alles sehr schick. Und fuer dcop gibt's auch nen python-binding. Diez From deets at web.de Tue Mar 6 11:58:28 2007 From: deets at web.de (Diez B. Roggisch) Date: Tue, 6 Mar 2007 12:58:28 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <200703061258.29139.deets@web.de> On Tuesday 06 March 2007 12:33, Bastian Venthur wrote: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? > > Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail > verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich > abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten > könnte. Ich muss meinen anderen post korrigieren - es ist total einfach: dcop kmail KMailIface openComposer a b c d e 0 Oeffnet bei mir ein Email-fenster, mit den vorausgefuellten werten wie man sie mittels dcop kmail KMailIface ermitteln kann. Also - wenn du KMail als existent & konfiguriert vorraussetzen kannst, ist das alles sehr schick. Und fuer dcop gibt's auch nen python-binding. Diez From venthur at debian.org Tue Mar 6 11:51:21 2007 From: venthur at debian.org (Bastian Venthur) Date: Tue, 06 Mar 2007 12:51:21 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: <20070306124219.7dfaafcc@n428> References: <20070306124219.7dfaafcc@n428> Message-ID: Am 06.03.2007 12:42 schrieb Kristian Rink: > Ohne es selbst probiert zu haben, ein paar Ideen hierzu: > > - Der "Standard-Mail-Client", der in Desktop-Umgebungen wie KDE oder > GNOME registriert ist, ist spezifisch für ebendiese DE. Insofern würde > ich dort versuchen, die entsprechenden Python-Bindings für KDE / GNOME > zu Hilfe zu nehmen und zu hoffen, daß dort solcherartige Funktionalität > beinhaltet ist. > > - Ansonsten: Wenn Du einen MUA hast, der via Kommandozeile derartige > Parameter entgegennimmt, kannst Du ja auch "einfach nur" einen > derartigen System-Aufruf (spawn()?) absetzen: Danke für deine Anregungen, aber das ist mir zu speziell, ich will möglichst unabhängig von der DE und dem Mailclienten sein. Meinst du man könnte irgendwas schön allgemein mit Hilfe von mailto:-Links und pyqt tricksen? Mir schwebt ein Button vor, der im Hintergrund einen mailto-Link "anklickt" und somit automatisch den Mailclienten der DE aufruft. Die Implementierungsdetails sind mir allerdings noch nicht ganz klar :) Schöne Grüße, Bastian -- Bastian Venthur http://venthur.de Debian Developer venthur at debian org From apaku at gmx.de Tue Mar 6 12:06:07 2007 From: apaku at gmx.de (Andreas Pakulat) Date: Tue, 6 Mar 2007 13:06:07 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <20070306120607.GA643@morpheus.apaku.dnsalias.org> On 06.03.07 12:33:34, Bastian Venthur wrote: > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? > > Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail > verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich > abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten > könnte. Wie Andreas schon sagte ist das nicht so einfach, aber Qt4 hat in der QDesktopService Klasse entsprechende Funktionen um eine URL zu oeffnen. Wenn du da mail:// nimmst sollte das den Mailclient starten. In der Doku ist auch genau das als Beispiel drin: http://doc.trolltech.com/4.2/qdesktopservices.html Das funktioniert allerdings (IIRC) nur fuer Gnome und KDE Desktops... Andreas -- Expect a letter from a friend who will ask a favor of you. From kristian at zimmer428.net Tue Mar 6 12:25:56 2007 From: kristian at zimmer428.net (Kristian Rink) Date: Tue, 6 Mar 2007 13:25:56 +0100 Subject: [Python-de] =?utf-8?q?E-Mailclient_=C3=B6ffnen?= In-Reply-To: References: <20070306124219.7dfaafcc@n428> Message-ID: <20070306132556.0c835bdd@n428> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Bastian; [Bastian Venthur @ Tue, 06 Mar 2007 12:51:21 +0100] > Danke für deine Anregungen, aber das ist mir zu speziell, ich will > möglichst unabhängig von der DE und dem Mailclienten sein. Meinst du > man könnte irgendwas schön allgemein mit Hilfe von mailto:-Links und > pyqt tricksen? Probieren. Ich bin unschlüssig, inwieweit mittlerweile die Interoperabilität zwischen den Desktops soweit gediehen ist, daß ein mailto: - Link aus einer QT-Anwendung in einem GNOME-Umfeld zu brauchbaren Ergebnissen führt. > Mir schwebt ein Button vor, der im Hintergrund einen mailto-Link > "anklickt" und somit automatisch den Mailclienten der DE aufruft. Trial-and-error? ;) Vielleicht sollte man so etwas eine Ebene tiefer ansetzen und hoffen, daß das System etwas in der Art "sensible-mail-client" oder "default-mail-client" gesetzt hat. Oder dann eben doch spawn und die Liste der verbreitetsten MUAs iterieren. Suboptimal, zugegeben. > Die Implementierungsdetails sind mir allerdings noch nicht ganz > klar :) Solang' denn eine DE verwendet wird, sollte das recht gut in einer Klasse kapselbar sein, die feststellt, in welcher DE die Anwendung läuft und sich des entsprechenden Systems bemächtigt. Für Trial-and-error ist's zumindest aufwendiger... Oder dann doch "ganz niedrig", einen minimalen MUA selbst bauen und hoffen, daß das Mail-Subsystem auf dem Host brauchbar konfiguriert ist... Cheers, Kristian - -- Kristian Rink * http://zimmer428.net * http://flickr.com/photos/z428/ jab: kawazu at jabber.ccc.de * icq: 48874445 * fon: ++49 176 2447 2771 "One dreaming alone, it will be only a dream; many dreaming together is the beginning of a new reality." (Hundertwasser) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFF7V3dcxBAPOA1m6wRAkHMAJ9VM/d2lEm3gJ6IyqaEy6M/8mdX3gCfWNsV s7f72K7mEtbl9TA7PWHLCKY= =8P+7 -----END PGP SIGNATURE----- From hpj at urpla.net Tue Mar 6 12:49:25 2007 From: hpj at urpla.net (Hans-Peter Jansen) Date: Tue, 6 Mar 2007 13:49:25 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: Message-ID: <200703061349.25280.hpj@urpla.net> Am Dienstag, 6. März 2007 12:33 schrieb Bastian Venthur: > Hallo, > > weis jemand von euch ob es irgendwie möglich ist innerhalb von Python > den Composer des Emailclienten aufzurufen? Optimal wäre wenn man das > An-, Betreff- und Inhaltsfeld schon mit Vorgaben belegen könnte. > > Falls das mit Python nicht so einfach geht, geht's evtl mit QT via pyqt? > > Hintergrund: ich schreibe ne Anwendung in der am Ende eine Mail > verschickt werden soll. Um den Nutzer soviel Arbeit wie möglich > abzunehmen wäre es gut wenn man das schon soweit wie Möglich vorbereiten > könnte. Hmm, zu dem bereits erwähnten Methoden kann ich nur noch hinzufügen, das es mit Python/PyQt sehr einfach ist, einen simplen Dialog zu bauen, um die zu versendende Mail noch zu verfeinern, und dann direkt zu versenden, ohne weitere Abhängigkeiten (außer einem benutzbaren MTA). Erfordert ein paar "config items" wie smtphost, smtpport, etc. und ein paar Zeilen Code, paßt aber meist dann, wenn kmail dcoppen et. al. keine Alternativen sind, und ist noch 100fach effizienter. Kann man übrigens auch prima mit einen sys.excepthook handler kombinieren, damit der Benutzer Dir auf einfachste Weise Python-Exceptions zumailen kann, wenn sie passieren.. So machen das jedenfalls meine besseren PyQt Programme. Pete From venthur at debian.org Tue Mar 6 12:32:36 2007 From: venthur at debian.org (Bastian Venthur) Date: Tue, 06 Mar 2007 13:32:36 +0100 Subject: [Python-de] =?iso-8859-1?q?E-Mailclient_=F6ffnen?= In-Reply-To: References: <20070306124219.7dfaafcc@n428> Message-ID: Am 06.03.2007 12:51 schrieb Bastian Venthur: > Mir schwebt ein Button vor, der im Hintergrund einen mailto-Link > "anklickt" und somit automatisch den Mailclienten der DE aufruft. > > Die Implementierungsdetails sind mir allerdings noch nicht ganz klar :) import webbrowser webbrowser.open("mailto:mail at example.com?subject=foo&body=bar") scheint ganz gut zu funktionieren. Es öffnet bei mir Firefox der wiederum Thunderbird aufruft. Ich weiß nicht wie portabel das bezogen auf andere DE, Browser und Mailclienten ist aber für den Anfang ist das schon mal nicht schlecht. Verbesserungsvorschläge sind immer Willkommen! @Andreas P: Dein Vorschlag mit QT4 ist auch sehr gut, leider kann ich den erst umsetzen wenn wir auch QT4 standardmäßig einsetzen :) Schöne Grüße, Bastian -- Bastian Venthur http://venthur.de Debian Developer venthur at debian org From diesch at spamfence.net Fri Mar 9 19:23:56 2007 From: diesch at spamfence.net (Florian Diesch) Date: Fri, 09 Mar 2007 20:23:56 +0100 Subject: [Python-de] =?iso-8859-15?q?E-Mailclient_=F6ffnen?= In-Reply-To: (Bastian Venthur's message of "Tue, 06 Mar 2007 13:32:36 +0100") References: <20070306124219.7dfaafcc@n428> Message-ID: <871wjycjar.fsf@spamfence.net> Bastian Venthur wrote: > Am 06.03.2007 12:51 schrieb Bastian Venthur: > > Mir schwebt ein Button vor, der im Hintergrund einen mailto-Link >> "anklickt" und somit automatisch den Mailclienten der DE aufruft. >> >> Die Implementierungsdetails sind mir allerdings noch nicht ganz klar :) > > import webbrowser > webbrowser.open("mailto:mail at example.com?subject=foo&body=bar") > > scheint ganz gut zu funktionieren. Es öffnet bei mir Firefox der > wiederum Thunderbird aufruft. Ich weiß nicht wie portabel das bezogen > auf andere DE, Browser und Mailclienten ist webbrowser hat eine rechte gute Heuristik, einen passenden Webbrowser zu finden. Es ist allerdings etwas unelegant, erst mal den Webbrowser zu starten, wenn man den eigentlich gar nicht braucht. > aber für den Anfang ist das schon mal nicht schlecht. > > Verbesserungsvorschläge sind immer Willkommen! IMHO solltest du dem Anwender auf jeden Fall die Möglichkeit geben, alternativ irgendwo einen Befehl zum Aufruf des MUA angeben zu können. Und du solltest dem Anwender sagen, was da passieten soll (falls etwas nicht klappt) und welchen Text du wohin mailen willst, damit er die Mail ggf. von Hand schrieben kann. Florian -- From sschwarzer at sschwarzer.net Fri Mar 9 21:47:07 2007 From: sschwarzer at sschwarzer.net (Stefan Schwarzer) Date: Fri, 09 Mar 2007 22:47:07 +0100 Subject: [Python-de] Python-Stammtisch in Leipzig, 13.03.2007, 20:00 Uhr Message-ID: <45F1D5DB.2050100@sschwarzer.net> === Leipzig Python User Group === Wir treffen uns am Dienstag, 13.03.2007 um 20:00 Uhr im Schulungszentrum der Python Academy in Leipzig ( http://www.python-academy.de/Schulungszentrum/anfahrt.html ). Für das leibliche Wohl wird gesorgt. Eine Anmeldung unter info at python-academy.de wäre nett, damit wir genug Essen besorgen können. Willkommen ist jeder, der Interesse an Python hat, die Sprache bereits nutzt oder nutzen möchte. Aktuelle Informationen zu den Treffen sind unter http://www.python-academy.de/User-Group zu finden. Viele Grüße Stefan Schwarzer From chris.arndt at web.de Sat Mar 10 18:31:23 2007 From: chris.arndt at web.de (Christopher Arndt) Date: Sat, 10 Mar 2007 19:31:23 +0100 Subject: [Python-de] =?utf-8?q?Ank=C3=BCndigung=3A_n=C3=A4chstes_Treffen_v?= =?utf-8?q?on_pyCologne_14=2E03=2E2007=2C_18=3A30_Uhr?= Message-ID: <45F2F97B.7010509@web.de> Hallo liebe Pythonfreunde, das nächste Treffen von PyCologne, der Python User Group Köln, findet statt am: Datum: Mittwoch, 14.03.2007 Zeit: 18:30 Uhr c.t. Ort: Pool 0.14, Benutzerrechenzentrum (RRZK-B) der Universität Köln, Berrenrather Str. 136, 50937 Köln Ich freue mich, damit bereits unser fünftes Treffen seit Gründung von pyCologne ankündigen zu können. Ich hoffe, dass auch dieses Mal wieder einige neue Gesichter dabei sein werden, und lade alle Interessierten, Python-Neulinge wie -Profis, Anwender wie Entwickler, herzlich zu unserem Treffen ein. Python goes into space: Das Vortragsthema für diesmal lautet "Python in der Luft- und Raumfahrt", referiert von Dr. Andreas Schreiber. Weiterhin wird Rebecca Breu den zweiten Teil ihres Vortrags "Python und Blender", "Die Blender Game-Engine" halten. Ich freue mich auf zwei bestimmt sehr interessante Vorträge! Für ca. 21:00 Uhr haben wir im Restaurant da Siro (www.dasiro.de) Plätze für einen gemütlichen Ausklang reserviert. Weitere Information zu pyCologne findet ihr auf unsere Seite im deutschen Python Wiki: http://wiki.python.de/User_Group_K%C3%B6ln Bis Mittwoch, Christopher Arndt From julian.rath at gmail.com Sun Mar 11 19:47:51 2007 From: julian.rath at gmail.com (Julian Rath) Date: Sun, 11 Mar 2007 20:47:51 +0100 Subject: [Python-de] Excel AddIn Message-ID: Hi Liste, also ich habe glaub ich das halbe internet auf den kopf gestellt weil ich eine Excel funktion in Python schreiben will und diese dann in Excel einbinden. So das wenn ich dann =PYTHON_FUNCTION in eine zelle schreibe die dazugehörige funktion aufgerufen wird. Das ExcelAddIn.py Besipiel kenne ich schon, hat mich bis jetzt aber nich weitergebracht. lg Julian From boesi.josi at gmx.net Tue Mar 13 08:20:41 2007 From: boesi.josi at gmx.net (Alexander 'boesi' =?ISO-8859-1?Q?B=F6secke?=) Date: Tue, 13 Mar 2007 09:20:41 +0100 Subject: [Python-de] Python 2.3 & Vista Message-ID: moin Nachdem jetzt auf neuen Rechnern fast nur noch Windows Vista vorinstalliert ist, stellt sich mir die Frage, ob Python 2.3 unter diesem Betriebssystem vernüftig läuft. Zu Python 2.4 hab ich Erfolgsmeldungen im Netz gefunden. Aber wie sieht das mit älteren Versionen aus, die noch nicht MSI zum installieren nutzen? Und hat jemand schon Erfahrungen mit zusätzlichen Packeten (konkret wxPython, pygame, PIL, aggdraw, pyVideo & win32all) sammeln können? Vielen Dank schon mal für eure Antworten cu boesi -- baka baka From pythonmailing at web.de Tue Mar 13 17:21:52 2007 From: pythonmailing at web.de (Marek Kubica) Date: Tue, 13 Mar 2007 18:21:52 +0100 Subject: [Python-de] Python 2.3 & Vista In-Reply-To: References: Message-ID: <20070313182152.518b188b@localhost> Servus, On Tue, 13 Mar 2007 09:20:41 +0100 Alexander 'boesi' Bösecke wrote: > Nachdem jetzt auf neuen Rechnern fast nur noch Windows Vista > vorinstalliert ist, stellt sich mir die Frage, ob Python 2.3 unter > diesem Betriebssystem vernüftig läuft. > > Zu Python 2.4 hab ich Erfolgsmeldungen im Netz gefunden. Aber wie > sieht das mit älteren Versionen aus, die noch nicht MSI zum > installieren nutzen? Nutze zwar kein so altes Python und auch kein Vista, aber Erfahrung hat gezeigt, dass Python in der Regel auch auf neuen Windows-Versionen laufen sollte. > Und hat jemand schon Erfahrungen mit zusätzlichen Packeten (konkret > wxPython, pygame, PIL, aggdraw, pyVideo & win32all) sammeln können? wxPython/wxWidgets sollte unter Vista vernünftig laufen [1][2]. Pygame und SDL dito [3], PIL enthält wohl auch kaum Code der unter Windows plötzlich aussetzen sollte und von pywin32 würde ich keine Probleme erwarten. Aber du kannst mal einfach versuchen es einfach unter Vista zu starten. Wenn du kein Vista hast kannst du bei Microsoft nach einer Beta suchen, und vielleicht läuft die in einer VM - zu Testzwecken sollte es ausreichend sein. grüße, Marek [1] http://wxwidgets.blogspot.com/2007/02/wxwidgets-under-vista.html [2] http://wxwidgets.org/docs/faqmsw.htm [3] http://www.gamedev.net/community/forums/topic.asp?topic_id=436905 From florian-mayer at gmx.at Wed Mar 14 18:20:29 2007 From: florian-mayer at gmx.at (Florian Mayer) Date: Wed, 14 Mar 2007 19:20:29 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: References: Message-ID: <45F83CED.4090800@gmx.at> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hatte heute bisschen langeweile, also habe ich mich hingesetzt und mal wieder was gecodet, rausgekommen ist bython, ein python wo man { und } verwenden kann, z.B. ist dort: class Test{ def __init__(self){ print "initializing" } } funktionierender Code, es ist eigentlich nur ein wrapper der die { und } in Einrueckungen umwandelt und dann ausfuehrt. Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur just-4-fun, ohne besonderen Grund programmiert. Code ist im Anhang. Was sagt ihr dazu? mfg Florian Mayer(a.k.a name) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF+Dzs8K8DrUhzLeARAvjoAJ95J5IdZVb60XPgBjFgVDsqHp5AnwCg2u0A D7e4/xBGpEu65a1wDM0OgaA= =qdLT -----END PGP SIGNATURE----- -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : main.py Dateityp : text/x-python Dateigröße : 1797 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070314/10649f56/attachment.py From florian-mayer at gmx.at Wed Mar 14 18:34:01 2007 From: florian-mayer at gmx.at (Florian Mayer) Date: Wed, 14 Mar 2007 19:34:01 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: <45F83CED.4090800@gmx.at> References: <45F83CED.4090800@gmx.at> Message-ID: Florian Mayer wrote: > Hatte heute bisschen langeweile, also habe ich mich hingesetzt und mal > wieder was gecodet, rausgekommen ist bython, ein python wo man { und } > verwenden kann, z.B. ist dort: > > class Test{ > def __init__(self){ > print "initializing" > } > } > > funktionierender Code, es ist eigentlich nur ein wrapper der die { und > } in Einrueckungen umwandelt und dann ausfuehrt. > Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur > just-4-fun, ohne besonderen Grund programmiert. > Code ist im Anhang. > > Was sagt ihr dazu? > > mfg Florian Mayer(a.k.a name) > hab ich glatt vergessen, der name hat sich aus braces(die eckigen klammern) un python ergeben >) ------------------------------------------------------------------------ #! /usr/bin/env python # -*- coding: utf-8 -*- import sys, os from optparse import OptionParser parser = OptionParser() parser.add_option("-o","--output", dest="outputfile", help="Write python file FILE",metavar="FILE") parser.add_option("-s", "--dontrun", action="store_false", dest="run", default=True, help="don't run the script") (options, args) = parser.parse_args() def getAmount(string): i = 0 count = 0 while(i < len(string)): if(string[i] == " "): count+=1 else: return count i+=1 result = list() intend_str = "\t" intend = 0 no_intend = list() file = args[0] file_dir = os.path.split(file)[0] if file_dir: os.chdir(file_dir) file_object = open(file) file_lines = file_object.readlines() for line in file_lines: no_intend.append(line[getAmount(line):]) line_nr = 1 line_int = [] for line in no_intend: intend_brf = intend line_int.append(intend_brf) plu_int = [1 for elem in line if elem == "{"] min_int = [1 for elem in line if elem == "}"] #print plu_int #print min_int for elem in plu_int: intend+=elem for elem in min_int: if intend == 0: print "ERROR on line %d: No intend to close" % line_nr sys.exit(1) intend-=elem line = line.replace("{",":") line = line.replace("}","") result.append("%s%s" % (intend_brf*intend_str,line)) line_nr+=1 result_str = '' for line in result: c_line = line.replace("\t","") c_line = c_line.replace("\n","") if c_line: result_str = ("%s%s" % (result_str, line)) if options.outputfile: outp = open(options.outputfile, "w") outp.write(result_str) outp.close() if options.run: namespace = {"__name__":"__main__"} exec result_str in namespace ------------------------------------------------------------------------ _______________________________________________ python-de maillist - python-de at python.net http://python.net/mailman/listinfo/python-de -- Best regards Florian Mayer GPG public key: http://florianmayer.fl.funpic.de/name/name.gpg Jabber: name at jabber.org ICQ: 446504088 Aim: segfaulthunter Yahoo: segfaulthunter IRC: name @ irc.freenode.net Secondary email: segfaulthunter at gmail.com From boesi.josi at gmx.net Wed Mar 14 19:26:17 2007 From: boesi.josi at gmx.net (Alexander 'boesi' =?ISO-8859-1?Q?B=F6secke?=) Date: Wed, 14 Mar 2007 20:26:17 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: <45F83CED.4090800@gmx.at> References: <45F83CED.4090800@gmx.at> Message-ID: Hi Am 14.03.2007 19:20:29 schrieb Florian Mayer: > funktionierender Code, es ist eigentlich nur ein wrapper der die { und > } in Einrueckungen umwandelt und dann ausfuehrt. ohne das ich mir deinen Code genauer angesehen hab, was produziert der bei sowas: class Test { def __init__(self) { print "initializing" } } oder noch besser: class Test {def __init__(self){ print "initializing"}} > Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur > just-4-fun, ohne besonderen Grund programmiert. > Code ist im Anhang. > > Was sagt ihr dazu? Das Python ne ziemlich genial einfache Syntax hat ... cu boesi -- ...schlafen ist sowieso ungesund... .-==Police Academy I==-. From bhoel at despammed.com Wed Mar 14 19:56:54 2007 From: bhoel at despammed.com (=?utf-8?q?Berthold_H=C3=B6llmann?=) Date: Wed, 14 Mar 2007 20:56:54 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern References: <45F83CED.4090800@gmx.at> Message-ID: Florian Mayer writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hatte heute bisschen langeweile, also habe ich mich hingesetzt und mal > wieder was gecodet, rausgekommen ist bython, ein python wo man { und } > verwenden kann, z.B. ist dort: > > class Test{ > def __init__(self){ > print "initializing" > } > } > > funktionierender Code, es ist eigentlich nur ein wrapper der die { und > } in Einrueckungen umwandelt und dann ausfuehrt. > Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur > just-4-fun, ohne besonderen Grund programmiert. > Code ist im Anhang. > > Was sagt ihr dazu? Warum soll man den Umsteigern das Leben so schwer machen? Gruß Berthold -- From h.goebel at goebel-consult.de Wed Mar 14 21:18:55 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Wed, 14 Mar 2007 22:18:55 +0100 Subject: [Python-de] Socket bleibt offfen Message-ID: <45F866BF.8090206@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo, ich versuche gerade für einen Bugreport einen (fast) minimalen Socket Server und Client zu bauen. Der Server soll einen Request bearbeiten und sich dann beenden. Der Client liest nur vom Server. Nachdem Client und Server ihre Arbeit getan haben, hängt aber noch eine Socket-Verbindung in Status TIME_WAIT herum. Ich finde nicht, wo der Haken ist. Nur, wenn ich das file.read() im Client weg lasse, wird der Socket sauber geschlossen. Was mache ich falsch? ...8<-------- Server ------- import SocketServer import sys MyRequestHandler = SocketServer.StreamRequestHandler if sys.argv[1:]: port = int(sys.argv[1]) else: port = 8000 server_address = ('', port) d = SocketServer.TCPServer(server_address, MyRequestHandler) print "Serving on %s port %s ..." % d.socket.getsockname() # handle one request only d.handle_request() print d.socket d.server_close() ...8<----------------------- ...8<-------- Client ------- import socket import sys if sys.argv[1:]: port = int(sys.argv[1]) else: port = 8000 server_address = ('localhost', port) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(server_address) file = sock.makefile() # wenn man die nächste Zeile weg laesst, schliesst der socket sauber print file.read(), file.close() sock.close() ...8<----------------------- - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Wir machen IT sicher - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRfhmv8zajR0mSa83AQIingf+LFh3Z+z1TF52womIBytSrXa77adk6Hsg LgRTfsBZm/dBt2DXFEx1XyudUmaX8AMN1x2QoOLnBakgji3QL2dOHZmXysL0fSeO RtHN4CfQVkS2zl296FlXMAhxjx2f734RVUrH6aZhggrG8aeJsSLW1UHbYuMBZTbJ 6yioje4hS25HDCf7RCAZsrMT8UZ2b9OodazkqU7w7JVrcdisxVTquu9f3mfCsaTo oOA3k5s5z0GO10PuyOf80ZBMjl8wTl/xxFZN//pDkPIM9Q6j1Jffre14egnZfrax Ix+HVxn02n4bSuQuFehMYtj8qsOi6+aiBb6wHstndhOMAyulFiR0jw== =vwaI -----END PGP SIGNATURE----- From flori at n-schlachter.de Wed Mar 14 21:25:49 2007 From: flori at n-schlachter.de (Florian Schlachter) Date: Wed, 14 Mar 2007 22:25:49 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F866BF.8090206@goebel-consult.de> References: <45F866BF.8090206@goebel-consult.de> Message-ID: <45F8685D.9080102@n-schlachter.de> Hallo Hartmut, Hartmut Goebel schrieb: > Was mache ich falsch? nischt. Klingt nach: http://www.google.de/search?q=python+setsockopt+reuse Einfach entsprechend die Option via setsockopt setzen. Möglich, dass der SocketServer ein Attribut "reuse_address" o.ä. bietet. HTH, Florian From h.goebel at goebel-consult.de Wed Mar 14 21:37:35 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Wed, 14 Mar 2007 22:37:35 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F8685D.9080102@n-schlachter.de> References: <45F866BF.8090206@goebel-consult.de> <45F8685D.9080102@n-schlachter.de> Message-ID: <45F86B1F.4010203@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Florian, > Hartmut Goebel schrieb: >> Was mache ich falsch? > > nischt. Klingt nach: Es kommt mir aber sehr komisch vor, dass die TCP-Verbindung nicht sauber abgebaut wird. Irgendwas scheint mir da doch faul. - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Wir machen IT sicher - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRfhrHszajR0mSa83AQKr0Qf/TTggAGjqO0XD+jmJtNtendeifd/ZPVCV jB38wAi/wZB1Qq9IP4JLz69j4r4uQaiFKXbHIYp5yTsu8YtKLOrEi+t28isthtHn OLsj0Sk8xjnlYLRluEwpi+y3PufGpXyYYYNYH/9nODQOZAJYkjg2od3xhirlcCXc CNZYpOq7KnSTmZEsfXk3EJGPWyFXBFW9AlldvNMoFyaEKSNXuNFytDAXNY5lAu87 OpnTInyNQF6ldII9F1UJbANoYMFrJfck2a23dtEa2NuldWDq6+ZdWKpuHRavuzoQ 5RwnB0LsMEmgXUzME3cl8ECtDz9v1EIQZ7YrddVnVHXD3Upde3EJ+w== =bVQ3 -----END PGP SIGNATURE----- From h.goebel at goebel-consult.de Wed Mar 14 21:50:13 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Wed, 14 Mar 2007 22:50:13 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F866BF.8090206@goebel-consult.de> References: <45F866BF.8090206@goebel-consult.de> Message-ID: <45F86E15.6030605@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo, Ups, da ist der Handle doch etwas zu klein ausgefallen. Mit dem der gar nicht tut, gibt es auch keine Probleme. Aber dieser, der ein Paar Zeichen über die Leitung schick, verursacht die Probleme. class MyRequestHandler(SocketServer.StreamRequestHandler): def handle(self): print >> self.rfile, "Hallo Client" Herausgefunden ahbe ich noch, dass der Verbindungs-Abbau unvollständig ist: 8000 > 43211 FIN, ACK 43211 > 8000 FIN, ACK 8000 > 43211 ACK Es fehlt also das ACK für das Beenden der Verbindung ducht den Server. - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Wir machen IT sicher - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRfhuFMzajR0mSa83AQLjzQf/TJuZIGK0uEIRWqAXPC0rdHhJYUegdvRT 3DGxssl4E64kMBdtH//7pxNRM9lePEOSaxPlKdpuIuQdzUgLpz3LvI8NKSS1HJux whwl0g0Y79+dCbmsqIrtjrJJLQxlnzRcivEEKhaX4Gn545eZKev23kxcaHJ0IQcb ofjxC1VIzRbNiHJLPZkCzA8oiytXlK60eOWAziCXbbSgvuIhsvo4aELW20wOT0wL gVkbP0EPFm4nfMinQJ0E36nCFeEM35xPZG6HQ4VzrHcpsUzP7Ic8mWkHIKC9/dWK YE5TgKf/7txsOf66LZFWRyJ+MjD4YcQQmNv4rgsaju2oKstnIe54zQ== =9lMz -----END PGP SIGNATURE----- From flori at n-schlachter.de Wed Mar 14 21:50:35 2007 From: flori at n-schlachter.de (Florian Schlachter) Date: Wed, 14 Mar 2007 22:50:35 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F86B1F.4010203@goebel-consult.de> References: <45F866BF.8090206@goebel-consult.de> <45F8685D.9080102@n-schlachter.de> <45F86B1F.4010203@goebel-consult.de> Message-ID: <45F86E2B.4000300@n-schlachter.de> Hallo Hartmut, Hartmut Goebel schrieb: >> Hartmut Goebel schrieb: >>> Was mache ich falsch? >> nischt. Klingt nach: > > Es kommt mir aber sehr komisch vor, dass die TCP-Verbindung nicht sauber > abgebaut wird. Irgendwas scheint mir da doch faul. Ne, AFAIK ist TIME_WAIT nach geschlossenem Socket eine Zeitsperre für TCP-Verbindungen, um sicherzustellen, dass die Verbindungen auch wirklich korrekt geschlossen wurden und dementsprechend dafür genug Zeit hatten (die Sperrzeit liegt bei ein paar Minuten). Wenn keine Verbindungen existierten/existieren, so besteht auch kein Grund für eine Sperrzeit (daher der Effekt, dass das TIME_WAIT erst nach einer Clientaktivität auftritt). Möchtest du den Port vor der Sperrzeit wieder benutzen, so nutze einfach die REUSE-Option, die du für einen low-level-Socket über die Methode setsockopt aktivieren kannst. HTH, Florian From flori at n-schlachter.de Wed Mar 14 21:55:58 2007 From: flori at n-schlachter.de (Florian Schlachter) Date: Wed, 14 Mar 2007 22:55:58 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F86E2B.4000300@n-schlachter.de> References: <45F866BF.8090206@goebel-consult.de> <45F8685D.9080102@n-schlachter.de> <45F86B1F.4010203@goebel-consult.de> <45F86E2B.4000300@n-schlachter.de> Message-ID: <45F86F6E.9000405@n-schlachter.de> Florian Schlachter schrieb: > Ne, AFAIK ist TIME_WAIT nach geschlossenem Socket eine Zeitsperre für > TCP-Verbindungen, um sicherzustellen, dass die Verbindungen auch > wirklich korrekt geschlossen wurden und dementsprechend dafür genug Zeit > hatten (die Sperrzeit liegt bei ein paar Minuten). Wenn keine > Verbindungen existierten/existieren, so besteht auch kein Grund für eine > Sperrzeit (daher der Effekt, dass das TIME_WAIT erst nach einer > Clientaktivität auftritt). Ergänzend ein paar Zitate aus dem RFC 793[1]: "TIME-WAIT STATE The only thing that can arrive in this state is a retransmission of the remote FIN. Acknowledge it, and restart the 2 MSL timeout." sowie "TIME-WAIT - represents waiting for enough time to pass to be sure the remote TCP received the acknowledgment of its connection termination request." Gruß Florian [1] http://tools.ietf.org/html/rfc793 From florian-mayer at gmx.at Wed Mar 14 21:26:34 2007 From: florian-mayer at gmx.at (Florian Mayer) Date: Wed, 14 Mar 2007 22:26:34 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: References: <45F83CED.4090800@gmx.at> Message-ID: Alexander 'boesi' Bösecke wrote: > Hi > > Am 14.03.2007 19:20:29 schrieb Florian Mayer: > >> funktionierender Code, es ist eigentlich nur ein wrapper der die { und >> } in Einrueckungen umwandelt und dann ausfuehrt. > > ohne das ich mir deinen Code genauer angesehen hab, was produziert der > bei sowas: > > class Test > { > def __init__(self) > { > print "initializing" > } > } > > oder noch besser: > > class Test {def __init__(self){ print "initializing"}} > >> Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur >> just-4-fun, ohne besonderen Grund programmiert. >> Code ist im Anhang. >> >> Was sagt ihr dazu? > > Das Python ne ziemlich genial einfache Syntax hat ... > > > cu boesi Sollte beides gehen, das erste ist getestet, beim zweiten sollte er alle { mit : ersetzen und alle } loeschen... -- Best regards Florian Mayer GPG public key: http://florianmayer.fl.funpic.de/name/name.gpg Jabber: name at jabber.org ICQ: 446504088 Aim: segfaulthunter Yahoo: segfaulthunter IRC: name @ irc.freenode.net Secondary email: segfaulthunter at gmail.com From lists at andreas-jung.com Thu Mar 15 04:27:24 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Thu, 15 Mar 2007 05:27:24 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: <45F83CED.4090800@gmx.at> References: <45F83CED.4090800@gmx.at> Message-ID: --On 14. März 2007 19:20:29 +0100 Florian Mayer wrote: > -----BEGIN PGP SIGNED MESSAGE----- >> > Was sagt ihr dazu? > > ...eines der Projekte, die niemand braucht. Sorry, aber das ist grober Unfug...aber nur meine persönliche Meinung :-) Andreas -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070315/0ae3ef60/attachment.pgp From python at t800.ping.de Thu Mar 15 06:13:11 2007 From: python at t800.ping.de (Karsten Schulz) Date: Thu, 15 Mar 2007 07:13:11 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <45F86E15.6030605@goebel-consult.de> References: <45F866BF.8090206@goebel-consult.de> <45F86E15.6030605@goebel-consult.de> Message-ID: <200703150713.11987.python@t800.ping.de> Hallo Hartmut, Am Mittwoch, 14. März 2007 22:50 schrieb Hartmut Goebel: > Herausgefunden ahbe ich noch, dass der Verbindungs-Abbau > unvollständig ist: > > 8000 > 43211 FIN, ACK der Server bestätigt das vorherige TCP-Paket und setzt FIN, um das Schließen seiner Seite der Verbindung zu verkünden. > 43211 > 8000 FIN, ACK der Client bestätigt das vorherige TCP-Paket und setzt FIN, um das Schließen seiner Seite der Verbindung zu verkünden. > 8000 > 43211 ACK Der Server bestätigt das letzte Paket des Clients. Der Socket befindet sich nun im Status TIME_WAIT, um zu verhindern, dass eine andere Anwendung diesen Socket (genauer TCP-Port 43211) benutzt und eventuell verspätet eintreffende TCP-Pakete der vorherigen Nutzung bekommt. Wenn Du diesen Schutz nicht möchtest, setze SO_REUSEADDR, wie an anderer Stelle bereits vorgeschlagen wurde. > Es fehlt also das ACK für das Beenden der Verbindung ducht den > Server. Es ist alles in Ordnung. Wenn das gezeigte Verhalten nicht richtig wäre, würde das bedeuten, dass der TCP/IP-Stack Deines Betriebssystems kaputt ist, nicht das Python Programm. Gruß Karsten -- Deutsche Übersetzungen von Fachbegriffen aus der Computerwelt: Modem (Modulator/Demodulator): VerEnt (Verwurschteler/Entwurschteler) From h.goebel at goebel-consult.de Thu Mar 15 09:27:59 2007 From: h.goebel at goebel-consult.de (Hartmut Goebel) Date: Thu, 15 Mar 2007 10:27:59 +0100 Subject: [Python-de] Socket bleibt offfen In-Reply-To: <200703150713.11987.python@t800.ping.de> References: <45F866BF.8090206@goebel-consult.de> <45F86E15.6030605@goebel-consult.de> <200703150713.11987.python@t800.ping.de> Message-ID: <45F9119F.4090803@goebel-consult.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Karsten, > Der Server bestätigt das letzte Paket des Clients. Der Socket befindet > sich nun im Status TIME_WAIT, um zu verhindern, dass eine andere > Anwendung diesen Socket (genauer TCP-Port 43211) benutzt und eventuell > verspätet eintreffende TCP-Pakete der vorherigen Nutzung bekommt. IC. Und ich dachte, ich kenne mich mit TCP aus :-\ Habe das eben mit natcat nachgestellt (weil ich es nicht glauben wollte ;-) und da ist es genau so. Nur verwendet netcat seit 2002 standardmaäßig SO_REUSEADDR -- wie wohl die meisten Anwendungen --, daher ist das nicht aufgefallen. Danke - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Wir machen IT sicher - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRfkRn8zajR0mSa83AQId3Qf/cwMfpby84hMN1TAco26mxgWBPB+B8ihl W9/W35VjusZhB5lJTFPPqjT8iQ5K7bqAZKPh+9w9yOcqouMAH0wo0eMQ68VEE5BA ny4v3u4uGuFrYLZ9RPR7b+CJw56rosFXCAUSZtiQC3MiTOluc7F8kBKkZ8tCDd5c GF74TChAriEZjQfVSyUC5lmsu8qhB9Q9XGWB5q6v8yOz20SR3YQ1IUJVrlP87mvS jHOFR5NfTPv6HilIYb+kYc7YZDqJH3Rszrievl57CRuIlYnU/Nt6wVKKcMjMsajW cpGFV+G4XgvJTK2rKX80zOVouku5jLRtHXYzl9WXqHPgwf8CyBxxOQ== =YniV -----END PGP SIGNATURE----- From boesi.josi at gmx.net Thu Mar 15 18:14:06 2007 From: boesi.josi at gmx.net (Alexander 'boesi' =?ISO-8859-1?Q?B=F6secke?=) Date: Thu, 15 Mar 2007 19:14:06 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: References: Message-ID: Hi Am 14.03.2007 22:26:34 schrieb Florian Mayer: > Sollte beides gehen, das erste ist getestet, beim zweiten sollte er alle > { mit : ersetzen und alle } loeschen... konsequenterweise musst du aber noch ; erlauben Und bei so daemlichen Konstrukten wie def __init__() {Befehl1; Befehl2;} musst du zusätzliche Zeilenumbrüche einfügen Je mehr ich darüber nachdenke, desto mehr frag ich mich, warum ich mir immer wieder C antue... cu boesi -- baka baka From stargaming at gmail.com Wed Mar 14 20:47:59 2007 From: stargaming at gmail.com (Stargaming) Date: Wed, 14 Mar 2007 21:47:59 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: <45F83CED.4090800@gmx.at> References: <45F83CED.4090800@gmx.at> Message-ID: Florian Mayer schrieb: > Hatte heute bisschen langeweile, also habe ich mich hingesetzt und mal > wieder was gecodet, rausgekommen ist bython, ein python wo man { und } > verwenden kann, z.B. ist dort: > > class Test{ > def __init__(self){ > print "initializing" > } > } > > funktionierender Code, es ist eigentlich nur ein wrapper der die { und > } in Einrueckungen umwandelt und dann ausfuehrt. > Ist eigentlich am meisten an Umsteiger gerichtet, aber eigentlich nur > just-4-fun, ohne besonderen Grund programmiert. > Code ist im Anhang. > > Was sagt ihr dazu? [snip] `from __future__ import braces`. :-) From pythonmailing at web.de Thu Mar 15 19:24:26 2007 From: pythonmailing at web.de (Marek Kubica) Date: Thu, 15 Mar 2007 20:24:26 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: References: Message-ID: <20070315202426.6eda0ffc@localhost> Hallo, On Thu, 15 Mar 2007 19:14:06 +0100 Alexander 'boesi' Bösecke wrote: > Am 14.03.2007 22:26:34 schrieb Florian Mayer: > > > Sollte beides gehen, das erste ist getestet, beim zweiten sollte er > > alle { mit : ersetzen und alle } loeschen... > > konsequenterweise musst du aber noch ; erlauben Das ist in Python sowieso schon möglich. Sowas auch: def foo(): print 'Hallo ',; print 'Welt' Allerdings werden Programmierer die solche Konstrukte in der Python-Welt zusammenbauen sowieso recht schnell erschlafen, daher ist das nie sonderlich populär gewesen ;) Was macht Bython eigentlich mit def foo() {} oder mit def foo() { print 'Hallo ',; print 'Welt'; } grüße, Marek From python at t800.ping.de Fri Mar 16 06:31:59 2007 From: python at t800.ping.de (Karsten Schulz) Date: Fri, 16 Mar 2007 07:31:59 +0100 Subject: [Python-de] Bython - Python mit geschwungenen Klammern In-Reply-To: References: <45F83CED.4090800@gmx.at> Message-ID: <200703160731.59547.python@t800.ping.de> Am Mittwoch, 14. März 2007 21:47 schrieb Stargaming: > `from __future__ import braces`. :-) Du schuldest mit einen neuen Monitor und Tastatur. Den Kaffee, den ich gerade eben da drauf geprustet habe, kriege ich nie wieder ab! ymmd. Karsten -- Tips und Beispiele zur Wahrung der deutschen Sprache (wenn schon, dann aber richtig!) Falsch : "Ich habe eine Infrarot-Tastatur." Richtig: "Ich habe eine Unterrot-größere-Anzahl-neben-und- untereinander-liegender-Tasten." From julian.rath at gmail.com Fri Mar 16 08:58:14 2007 From: julian.rath at gmail.com (Julian Rath) Date: Fri, 16 Mar 2007 09:58:14 +0100 Subject: [Python-de] =?iso-8859-1?q?=D6sterreichischeRunde?= Message-ID: Hallo Liste, wollte mal Fragen, ob wer von euch Österreicher oder gar Grazer is. Und das man eventuell sowas wie einen Stammtisch in graz einrichted?! lg Julian From PepeCyB at hagemeisterbln.de Mon Mar 19 16:50:33 2007 From: PepeCyB at hagemeisterbln.de (Daniel Hagemeister) Date: Mon, 19 Mar 2007 17:50:33 +0100 Subject: [Python-de] os.fork ... externes Programm wird immer doppelt gestartet Message-ID: <200703191750.34358.PepeCyB@hagemeisterbln.de> Hallo, ich wurschtele gerade weiter an einem kleinen Programm zur Erstellung von Verkaufstexten für eBay (nutzt PyQt... ist hier aber kein PyQt-Problem). Nun wollte ich eine Hilfe-Funktion einbauen, bei der der Web-Browser Konqueror mit meiner HTML-Hilfedatei geöffnet wird. Der Aufruf der Sub führt aber immer zum zweifachen Start des Konqueror. Woran mag das liegen? Gruß Daniel ---- Code: . . import os from posix import execv . . . def helpContents(self): pid = os.fork() if pid == 0: status = execv("/usr/bin/konqueror",("--profile webbrowsing","eBayEd.html")) os.wait() From basti.wiesner at gmx.net Mon Mar 19 17:17:19 2007 From: basti.wiesner at gmx.net (Sebastian Wiesner) Date: Mon, 19 Mar 2007 18:17:19 +0100 Subject: [Python-de] os.fork ... externes Programm wird immer doppelt gestartet In-Reply-To: <200703191750.34358.PepeCyB@hagemeisterbln.de> References: <200703191750.34358.PepeCyB@hagemeisterbln.de> Message-ID: <200703191817.24632.basti.wiesner@gmx.net> [ Daniel Hagemeister ] > Hallo, > > ich wurschtele gerade weiter an einem kleinen Programm zur Erstellung von > Verkaufstexten für eBay (nutzt PyQt... ist hier aber kein PyQt-Problem). > Nun wollte ich eine Hilfe-Funktion einbauen, bei der der Web-Browser > Konqueror mit meiner HTML-Hilfedatei geöffnet wird. > Der Aufruf der Sub führt aber immer zum zweifachen Start des Konqueror. > Woran mag das liegen? Blöde Frage: Warum verwendest du nicht gleich das subprocess Modul? Das macht im Prinzip nichts anderes, funktioniert aber ;) > import os > > >from posix import execv Wozu dieser import? os.execv gibts auch ... > def helpContents(self): > pid = os.fork() > if pid == 0: > status = execv("/usr/bin/konqueror",("--profile > webbrowsing","eBayEd.html")) > os.wait() import subprocess ... cmd = ['/usr/bin/konqueror', '--profile', 'webbrowsing', 'eBayEd.html'] process = subprocess.Popen(cmd) process.wait() -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070319/0bfbdb19/attachment.pgp From PepeCyB at hagemeisterbln.de Mon Mar 19 21:00:28 2007 From: PepeCyB at hagemeisterbln.de (Daniel Hagemeister) Date: Mon, 19 Mar 2007 22:00:28 +0100 Subject: [Python-de] =?iso-8859-1?q?=5Bgel=F6st=5D_os=2Efork_=2E=2E=2E_ext?= =?iso-8859-1?q?ernes_Programm_wird_immer_doppelt_gestartet?= In-Reply-To: <200703191750.34358.PepeCyB@hagemeisterbln.de> References: <200703191750.34358.PepeCyB@hagemeisterbln.de> Message-ID: <200703192200.29095.PepeCyB@hagemeisterbln.de> Erstmal vielen Dank für den Tip mit "subprocess" und das Modul "webbrowser"! Werde mich mit beidem noch näher beschäftigen... Mein Problem ist vorerst auch gelöst... war allerdings doch ein Qt/PyQt-Problem: Ich hatte versehentlich die Sub mit dem Signal "activated()" statt mit "clicked()" verbunden. Mit "clicked()" klappt es... der Browser wird nur einmal gestartet. Gruß Daniel From LightLan at lightlan.de Sat Mar 24 17:55:49 2007 From: LightLan at lightlan.de (Paul Rauch) Date: Sat, 24 Mar 2007 18:55:49 +0100 Subject: [Python-de] building a django rpm, probs with adding documentation Message-ID: <46056625.5040701@lightlan.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo, Ich baue grade ein rpm für django. aber die docfiles werden beim befehl python setup.py build nicht in das Build-Verzeichnis kopiert, weswegen ich diese nicht zum rpm hinzufügen kann. Kann man setup.py einen parameter übergeben, um die docs ins build-verzeichnis reinzukriegen? mfg Paul Rauch -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iQIVAwUBRgVmJRG67lyyQrltAQKxtg/8DSIxRrp8rm24mesgz7HVMtR1YkVtkJcj BmKNbkhmS9NFkD6dv1/n0Dp+TshROgcnRYgL/xBFza2cCA4P+aLiQDmT5222j0cF ukZBQ8yHnLuTl0YQmyeh37FlGrdI8leMGJneCoDe+aQxp8hxd+Svf3oVLSUNvI7m CD0NbNU+QRM/yCbP11WiQhIBwQKSshC2RUtqYry0owDAFcOKaeM6NQsRenzDrXAd +b0br3p8gw4s7YtnG7PjgGvayLCMYOeArANv4zoyMF6dj4ZuQ5Tc1qOB2hZ/DiAD p8Na5Kzwz8AJ9WG+T4x4ohnajjYyca84MiUJjuRMlhxuXHNcWmA0ze8OFrVHTJNd aouZqVBAHrqWiDqXO1qjrsf2DQiIQ+JPPY8aqueUaFbMnRCJjCYY8MSNKIsu+TE7 qUqL/qPcXMfkKUIMDs9td83xd6mi0r59I2rxls9G+z4sh4MKrh3cWdWihWdq7fV9 6NLDTSR4z71DD4cAMhn1qMIDKXlxySymRlt11DW6/vHeQKCsnQPRRROdRovbHGuM Ciiftfhuaci06MzV27ftbo8aM+i0HwNIkUbDsuvXQrS7MBCVfi0aPc/SJg/RUeWk Mkh/GBHAp2p5372GeXduVahO49KX3M3NjoDLZFTDMRah/jGh2N+7pNiA8eohGjtr iquuH01Ew2A= =3AmS -----END PGP SIGNATURE----- From pbaettig at gmx.net Sun Mar 25 14:23:51 2007 From: pbaettig at gmx.net (=?ISO-8859-15?Q?Pascal_B=E4ttig?=) Date: Sun, 25 Mar 2007 16:23:51 +0200 Subject: [Python-de] Spass mit Dateien unter Windows Message-ID: <460685F7.9050909@gmx.net> Hallo Allesamt, Ich habe ein kleines Problem. Ich möchte ein Python Skript schreiben, dass mir aus den Drei Fragezeichen Folgen auf meinem Pc eine auswählt und die wiedergabe startet. das Problem ist nur, dass ich nur einen, zwar eindeutigen, aber nicht kompletten Teil des Dateinamens habe. z.B. DDF - 063 -*.mp3. Gibt es eine Funktion, bei der ich diesen namen mitgeben kann und die mir dann den vollen Namen der Datei zurückliefert? Ungefähr so: gesuchte_funktion(' DDF - 063 -*.mp3') --> DDF - 063 - Fussball-Gangster.mp3 Vielen Dank im voraus Pascal Bättig From lists at andreas-jung.com Sun Mar 25 15:27:19 2007 From: lists at andreas-jung.com (Andreas Jung) Date: Sun, 25 Mar 2007 16:27:19 +0100 Subject: [Python-de] Spass mit Dateien unter Windows In-Reply-To: <460685F7.9050909@gmx.net> References: <460685F7.9050909@gmx.net> Message-ID: <7ACE312BAC0C0F931C7EBF11@suxmac2.local> --On 25. März 2007 16:23:51 +0200 Pascal Bättig wrote: > Hallo Allesamt, > > Ich habe ein kleines Problem. Ich möchte ein Python Skript schreiben, > dass mir aus den Drei Fragezeichen Folgen auf meinem Pc eine auswählt > und die wiedergabe startet. das Problem ist nur, dass ich nur einen, > zwar eindeutigen, aber nicht kompletten Teil des Dateinamens habe. z.B. > DDF - 063 -*.mp3. Gibt es eine Funktion, bei der ich diesen namen > mitgeben kann und die mir dann den vollen Namen der Datei zurückliefert? > Ungefähr so: gesuchte_funktion(' DDF - 063 -*.mp3') --> DDF - 063 - > Fussball-Gangster.mp3 os.listdir() + 'fnmatch' Modul? 'glob' Modul? Schau mal in die Python Doku :-) -aj -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 186 bytes Beschreibung: nicht verfügbar URL : http://python.net/pipermail/python-de/attachments/20070325/5841fb90/attachment.pgp From boesi.josi at gmx.net Mon Mar 26 20:09:27 2007 From: boesi.josi at gmx.net (Alexander 'boesi' =?ISO-8859-1?Q?B=F6secke?=) Date: Mon, 26 Mar 2007 22:09:27 +0200 Subject: [Python-de] Thread ein 2. Mal starten Message-ID: <20070326215344.1B7E.BOESI.JOSI@gmx.net> moin ich möchte einen Thread mehrfach starten (also starten-beenden-starten-...) Doch beim 2. Start bekomme ich die Fehlermeldung "AssertionError: thread already started", obwohl ich beim Beenden des Threads extra mit join() warte. Wenn ich mir den Quelltext zu threading.Thread ansehe, ist das auch kein Wunder: Die Funktion start testet auf die Variable self.__started und setzt sie im Anschluss selbst auf True. Die Variable wird aber zu keinem Zeitpunkt auf False gesetzt, der Thread kann also gar kein 2. Mal gestartet werden. Die Funktion isAlive tested auf "self.__started and not self.__stopped". Das könnte die Funktion start natürlich auch tun, aber dann ist die Variable self.__started irgendwie sinnfrei. Alternativ könnte die Funktion __stop die Variable auf False setzen, aber dann meckert join. Letztendlich beist sich die Katze selbst in'n Schwanz. Es kann ja aber auch nicht der Sinn sein, jedesmal eine neue Instanz der Klasse zu erzeugen, wenn der Thread gestartet werden soll, oder? Welche Intention steckt also hinter diesem Design? Aus der Doku geht nicht hervor, das ein Thread nicht neugestartet werden darf, wenn er beendet wurde. Vielen Dank schonmal für eure Antworten cu boesi -- Ein Wunder muss heute schon ganz schoen wundervoll sein um ein Wunder zu sein, sonst wuerde man sich ja gar nicht mehr wundern .-==Prof. Dr. Harald Lesch==-. From martin at v.loewis.de Mon Mar 26 21:18:37 2007 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Mon, 26 Mar 2007 23:18:37 +0200 Subject: [Python-de] Thread ein 2. Mal starten In-Reply-To: <20070326215344.1B7E.BOESI.JOSI@gmx.net> References: <20070326215344.1B7E.BOESI.JOSI@gmx.net> Message-ID: <460838AD.9030101@v.loewis.de> > Es kann ja aber auch nicht der Sinn sein, jedesmal eine neue Instanz der > Klasse zu erzeugen, wenn der Thread gestartet werden soll, oder? Doch, genau das ist der Sinn. > Welche > Intention steckt also hinter diesem Design? Aus der Doku geht nicht > hervor, das ein Thread nicht neugestartet werden darf, wenn er beendet > wurde. Ein Thread *kann* auf Betriebssystemebene nur einmal gestartet werden. Wenn er das nächste Mal gestartet wird, ist es ein anderer Thread. Jeder Thread hat eine Thread-Id, die einmalig ist und für jeden anderen Thread anders ist. Die Python-Thread-Klasse folgt diesem Modell. Wenn man für ein Thread-Objekt .join() ausführt, dann meint man damit den eindeutigen, einmaligen Betriebssystem-Thread. Nachdem der Thread zuende ist, muss .join() sofort wiederkehren. Diese Semantik wäre verletzt, wenn das gleiche Python-Thread-Objekt nacheinander verschiedene Threads repräsentieren würde. Ciao, Martin From creimer at xs4all.nl Tue Mar 27 19:41:49 2007 From: creimer at xs4all.nl (Carsten Reimer) Date: Tue, 27 Mar 2007 21:41:49 +0200 Subject: [Python-de] Junior-Webentwickler (Python, Django, PostgreSQL) gesucht Message-ID: <1175024509.4990.10.camel@localhost.localdomain> Hallo, Galileo Press - der Verlag für Experten - sucht Verstärkung für sein Webteam. Die Stellenanzeige findet sich unter http://www.galileo-press.de/verlag/jobs/gp/job-33 Näheres über den Verlag gibt es unter http://www.galileo-press.de/verlag/ . Geboten werden spannende Projekte, die zusammen mit einem hochmotivierten Team in einer fantastischen Arbeitsatmosphäre auf einer modernen Plattform entwickelt werden. Bewerben lohnt sich. Mit freundlichen Grüßen Carsten Reimer (seit 5 Monaten begeisterter Webentwickler bei Galileo Press) From stephan.diehl at gmx.net Wed Mar 28 08:55:54 2007 From: stephan.diehl at gmx.net (Stephan Diehl) Date: Wed, 28 Mar 2007 10:55:54 +0200 Subject: [Python-de] Python Treffen Berlin am 3.4. Message-ID: <460A2D9A.9070105@gmx.net> Liebe Berliner Python Enthusisasten, wir wollen uns wieder treffen: in einer Woche, am Dienstag, den 3.4. um 19 Uhr. In gewohnter Manier ist noch kein Treffpunkt festgelegt. Wer zuerst schreit, bekommt den Zuschlag :-) Christian hat versprochen, einen real existierenden XO (das ist der 'Laptop' von der One Laptop Per Child Initiative) mitzubringen. Da die Berliner Python Mailingliste wieder nicht richtig funktioniert (es gibt viele kaputte Links) hab ich einfach eine entsprechende Google Gruppe eingerichtet (http://groups.google.de/group/python-berlin). Bitte tragt euch da ein; insbesondere alle neu interessierten. Stephan