[Python-de] Hat jemand Python unter Solaris zum Laufen gebracht?
Dr.Dr.Ruediger M.Flaig
flaig at hablas.com
Mit Apr 7 23:46:46 CEST 2004
Hallo allerseits,
nachdem ich Python auf drei verschiedenen Versionen von Linux und auf MacOS-X ohne irgendwelche Probleme zum Laufen bringen konnte, dachte ich, daß es auch mit Solaris funktionieren müsse... aber dem war nicht so! Kann mir da irgendwer weiterhelfen?
Aaalso, ich habe mir GCC Version 3.3.2 und Python 2.3.3 (TGZ) beschafft, das Python-Archiv ausgepackt (da gab's das erste Problem, weil nach dem Gunzippen die Solaris-Version von TAR irgendwas von Prüfsummenfehler faselte, aber das ließ sich schließlich umgehen) und mit "./configure" begonnen. Ergebnis: FEHLER -- das Installationsskript wußte nicht, auf was für einem Rechner es lief. Mit "--host=sparc64-solaris" ließ sich auch das beheben... bis schließlich das Skript mit der jämmerlichen Feststellung ausstieg, es sei unfähig, zu identifizieren, ob das System "big endian" sei. Ich weiß, daß es das ist, aber ich habe keine Ahnung, wie ich dem blöden Skript das verständlich machen soll.
Falls jemand eine Lösung weiß, werde ich sehr dankbar sein. Zum Hintergrund: Der Rechner ist eine Ultra-5 mit 1x UltraSparc II (333 MHz), 128 MB Speicher und 9 GB Freßplatte, System ist Solaris-9 (frisch installiert).
Viele Grüße,
Rüdiger Marcus
Dr. Dr. Ruediger Marcus Flaig
Institute for Immunology
University of Heidelberg
Im Neuenheimer Feld 305
D-69120 Heidelberg
<flaig at cirith-ungol.sanctacaris.net>
Tel. +49-172-7652946
| +49-6221-56-5402
| +49-6221-432963
--- python-de-request at python.net wrote:
Um Emails an die Liste python-de zu schicken, schicken Sie diese an
die Adresse
python-de at python.net
Um sich via Web von der Liste zu entfernen oder draufzusetzen:
http://python.net/mailman/listinfo/python-de
oder, via Email, schicken Sie eine Email mit dem Wort 'help' in
Subject/Betreff oder im Text an
python-de-request at python.net
Sie koennen den Listenverwalter dieser Lister unter der Adresse
python-de-owner at python.net
erreichen
Wenn Sie antworten, bitte editieren Sie die Subject/Betreff auf einen
sinnvollen Inhalt der spezifischer ist als "Re: Contents of python-de
digest..."
Meldungen des Tages:
1. Re: Python & USB (Marco Bartel)
2. Re: Dateien ueber Sockets uebertragen (Hartmut Goebel)
3. Re: Re: Dateien ueber Sockets uebertragen (Holger Duerer)
4. Re: Dateien ueber Sockets uebertragen (Holger Duerer)
5. Re: Dateien ueber Sockets uebertragen (Alexander 'boesi' Bösecke )
6. Re: Dateien ueber Sockets uebertragen (Alexander 'boesi' Bösecke )
----------------------------------------------------------------------
Message: 1
Date: Tue, 06 Apr 2004 14:41:20 +0200
From: Marco Bartel <Marco.Bartel at iee.lu>
Subject: Re: [Python-de] Python & USB
To: Arnd Zapletal <a_zapletal at web.de>
Cc: python-de at python.net
Message-ID: <4072A570.1060501 at iee.lu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Arnd Zapletal wrote:
>On Mon, 05 Apr 2004 13:19:45 +0200
>Marco Bartel wrote:
>
>[...]
>
>
>>is a library called libusb for c , wich deals with the
>>usb-kernel-modules, but unfortunatly i didn't found a wrapper around
>>this library, wich allows me to do the same from within python. I just
>>was thinking about to do the wrapper myself using SWIG
>>
>>
>[...]
>
>
>did you think about 'pyrex' for bridging to the c-library?
>
>it's quite fast, pretty cool and much less pain (compared to swig, IMHO)
>
>cu
>Arnd
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>python-de maillist - python-de at python.net
>http://python.net/mailman/listinfo/python-de
>
>
Hallo Arnd,
hab gerade erst gerafft, dass ich hier in Englisch geposted habe :-)
Naja kann mal passieren. Hab allerdings von pyrex noch nicht gehört. Mit
SWIG hab ich schon einige Dinge gewrapped, und auf der comp.lang.python
hab ich auch schon nen link auf nen SWIG-wrapper rund um libusb
gefunden, der prima funktioniert. Zumal mein C Programm, welches ich
nach python portieren will, auch libusb nutzt, ist der wrapper eine
runde sache, und relativ schmerzfrei :-)
Falls jemand daran interressiert ist:
http://cvs.sf.net/viewcvs.py/bitpim/bitpim/native/usb/
THX
Marco
------------------------------
Message: 2
Date: Mon, 05 Apr 2004 20:51:33 +0200
From: Hartmut Goebel <h.goebel at crazy-compilers.com>
Subject: Re: [Python-de] Dateien ueber Sockets uebertragen
To: Alexander 'boesi' Bösecke <boesi.josi at gmx.net>
Cc: Python-de <python-de at python.net>
Message-ID: <4071AAB5.2040800 at crazy-compilers.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Alexander 'boesi' Bösecke schrieb:
>>* Was ist das maximale Beispiel, bei dem der Fehler nicht auftritt?
>
> Remote trat der Fehler immer auf. Lokal gar nicht. Bzw ich weiss nicht,
> was du mit maximales Beispiel meinst.
Ein "maximales Beispiel, bei dem der Fehler auftritt" ist das Beispiel,
das gerade so komplex ist, dass der Fehler noch nicht auftritt. Die Idee
dahinter ist, den Fehler von "oben" und "unten" einzugrenzen: Man
iteriert sich quasi an den Fehler heran. Klar?
>>* Welche Zeile(n) unterscheiden das Beispiel, bei dem der Fehler
>> auftritt, von einem Beispiel, bei dem der Fehler nicht mehr auftritt?
>
> Ein time.sleep(0.2) nach dem ersten send brachte Abhilfe, das war aber
> natuerlich keine Loesung
Damit hast Du vielleicht einen word-around gefunden, aber das Problem
nicht gelöst. Oder konntest Du danahc sagen: "Aha, daran war es gelegen"?
(Ich überlege mich eben, ob ich eine Vorlesung: Fehlersuche in
Programmen anbieten soll ;-)
> Allerdings scheint mir (c)Pickle wirklich nicht das geeignete Mittel um
> einfache Datentypen wie Integer, Listen und Tupel zu uebertragen. Oder
> spricht irgendwas gegen die Verwendungen von repr/eval?
Ja: eval ist typischerweise ein Zeichen von schlechtem Code, da es sich
in den meisten Fällen vermeiden läßt. Für den Lösungsweg, den Du unten
gegangen bist, wäre es aber okay -- ich würde nur gleich einen anderen
Lösungsweg gehen ;-)
Allerdings machst Du unten -- nach meinem Geschmack -- viel zu viel per
Hand. Ich würde dann noch eher eine Mischung aus Deinem vorherigen
Ansatz machen: Daten Pickeln und deren Länge vornewegschicken. Was Du
dazu brauchst, hast Du unten schon stehen, kannst aber 80% wieder
rausnehmen, weil das Pickle für dich übernimmt.
> Ich habs jetzt folgender Klasse geloest:
Hmmmm, zum Lernen okay, für produktiven Einsatz hat es einen Haken: Es
löst ein Problem, für das es schon andere Lösungen gibt.
> if FIL == 1:
> typ = 'FIL'
> else:
> if type(data) == int: typ = 'INT'
> elif type(data) == long: typ = 'LNG'
> elif type(data) == str: typ = 'STR'
> elif type(data) == list: typ = 'LST'
> elif type(data) == tuple: typ = 'TPL'
> else: typ = 'OTH'
> data = repr(data)
> if FIL == 0: data = repr(data)
Das kannst Du auch Pickle machen lassen, denn Pickle arbeitet auch nicht
anders.
> while length == 0:
...
> while typ == '':
...
Wenn Du Header und Daten mit einem anderen Zeichen trenntst, als die
Header-Felder untereinander, dann brauchst Du nur eine Schleife:
while not '\n' in self.getData:
...
(kann man noch optimieren).
--
Regards
Hartmut Goebel
| Hartmut Goebel | We build the crazy compilers |
| h.goebel at crazy-compilers.com | Compiler Manufacturer |
------------------------------
Message: 3
Date: Tue, 06 Apr 2004 20:43:13 +0100
From: Holger Duerer <python-lists at duerer-sinclair.de>
Subject: Re: [Python-de] Re: Dateien ueber Sockets uebertragen
To: Alexander 'boesi' Bösecke <boesi.josi at gmx.net>
Cc: Python-de <python-de at python.net>
Message-ID: <873c7gx57y.fsf at Ronaldann.demon.co.uk>
Content-Type: text/plain; charset=iso-8859-1
>>>>> "Alexander" == Alexander 'boesi' Bösecke <boesi.josi at gmx.net> writes:
>> Wg. des 0.2 sek. wartens: Da gibt es eine Option, den
>> Nagle-Algorithmus auszuschalten, damit sollte dieses
>> Zeitinterval kuerzer werden.
Alexander> Das ist dann aber die Methode mit'm Vorschlaghammer,
Alexander> oder?
Für das, was er machen wollte, schon. Das Abschalten des
Nagle-Algorithmus kann jedoch sehr sinnvoll sein. Wenn Du ein
Protokoll hast, bei dem beide Seiten schnell, wechselseitig eineinader
kurze Packete schicken, bringt das einen merklichen Durchsatzgewinn.
Holger
------------------------------
Message: 4
Date: Tue, 06 Apr 2004 20:48:32 +0100
From: Holger Duerer <python-lists at duerer-sinclair.de>
Subject: Re: [Python-de] Dateien ueber Sockets uebertragen
To: Alexander 'boesi' Bösecke <boesi.josi at gmx.net>
Cc: Python-de <python-de at python.net>
Message-ID: <87y8p8vqen.fsf at Ronaldann.demon.co.uk>
Content-Type: text/plain; charset=iso-8859-1
>>>>> "Alexander" == Alexander 'boesi' Bösecke <boesi.josi at gmx.net> writes:
[...]
Alexander> sendData = '%d-%s-%s' % (len(data), typ, data)
Alexander> try: self.send(sendData)
Alexander> except: return 1
[...]
Hmmm. Rein aus dem Gedächnis heraus, würde ich sagen, daß man besser
self.sendall(sendData) sagen sollte. Falls sendData zu gross wird,
wird Dir send() nicht alles schicken.
Ausschnitt aus "pydoc socket":
,----
| sendall(data[, flags]) -- send all data
| send(data[, flags]) -- send data, may not send all of it
`----
Holger
------------------------------
Message: 5
Date: Wed, 07 Apr 2004 11:21:06 +0200
From: "Alexander 'boesi' Bösecke " <boesi.josi at gmx.net>
Subject: Re: [Python-de] Dateien ueber Sockets uebertragen
To: Python-de <python-de at python.net>
Message-ID: <c50o73.4pc.1 at boesi.MyFQDN.de>
Content-Type: text/plain; charset="ISO-8859-1"
Hi
Am 06.04.2004 21:48:32 schrieb Holger Duerer:
> Hmmm. Rein aus dem Gedächnis heraus, würde ich sagen, daß man besser
> self.sendall(sendData) sagen sollte. Falls sendData zu gross wird,
> wird Dir send() nicht alles schicken.
Hab mir mal die Doku dazu angesehen.
send und sendall unterscheiden sich lediglich in der Fehlerbehandlung.
send gibt die Zahl der gesendeten Bytes zurueck, im Normalfall ist das
halt len(sendData). sendall dagegen loest eine exception aus, wenn nicht
alle Bytes gesendet werden konnten, es ist aber nicht moeglich zu
erfahren wieviele Bytes gesendet worden.
Es ist also Blödsinn send in try-except zu kapseln, und da ich ich im
Moment noch keine Fehlerbehandlung einbauen will, kann/sollte ich
sendall verwenden, damit ich Fehler ueberhaupt mitbekomm.
cu boesi
--
So stellt sich der Atheist doch die #1671 : icq-intern
Unsterblichkeit vor - Lokalverbot #73628288 : icq-extern
auf dem Friedhof. boesi111 : aim
i171 : reallife
------------------------------
Message: 6
Date: Wed, 07 Apr 2004 11:44:54 +0200
From: "Alexander 'boesi' Bösecke " <boesi.josi at gmx.net>
Subject: Re: [Python-de] Dateien ueber Sockets uebertragen
To: Python-de <python-de at python.net>
Message-ID: <c50pjn.4l0.1 at boesi.MyFQDN.de>
Content-Type: text/plain; charset="ISO-8859-1"
Hi
Am 05.04.2004 20:51:33 schrieb Hartmut Goebel:
> > Ein time.sleep(0.2) nach dem ersten send brachte Abhilfe, das war aber
> > natuerlich keine Loesung
>
> Damit hast Du vielleicht einen word-around gefunden, aber das Problem
> nicht gelöst. Oder konntest Du danahc sagen: "Aha, daran war es gelegen"?
Deswegen ja auch "das war aber natuerlich keine Loesung"
Und ausserdem ... hat sich eine gewisse Anwendung namens Word inzwischen
als Synonym fuer work-around verbreitet? *g*
> Ja: eval ist typischerweise ein Zeichen von schlechtem Code, da es sich
> in den meisten Fällen vermeiden läßt.
Naja vermeiden kann man verdammt viel. Aber ist eval von der Performance
her denn so schlecht? Oder was sind konkrete Nachteile von eval? (also
nicht nur auf mein aktuelles Problem bezogen)
> Für den Lösungsweg, den Du unten gegangen bist, wäre es aber okay --
> ich würde nur gleich einen anderen Lösungsweg gehen ;-)
Dazu faellt mir jetzt Perl ein - There's more than one way to do it. *g*
> Allerdings machst Du unten -- nach meinem Geschmack -- viel zu viel per
> Hand. Ich würde dann noch eher eine Mischung aus Deinem vorherigen
> Ansatz machen: Daten Pickeln und deren Länge vornewegschicken.
Ok, hab deine Anmerkungen in die beiden Methoden eingearbeitet, die
sehen jetzt so aus:
def sendData(self, data, File=0):
if File == 1:
typ = 'F'
else:
data = cPickle.dumps(data)
typ = 'P'
self.sendall('%d-%s.%s' % (len(data), typ, data))
Den Typ F verwende ich fuer Daten, die Teil von Dateien sind, irgendwie
find ichs albern die zu picklen.
def recvData(self):
while 1: # Header der Nachricht
index = self.getData.find('.')
if index != -1:
length, typ = self.getData[:index].split('-', 1)
length = int(length)
self.getData = self.getData[index+1:]
break
self.getData += self.recv(self.BufSize)
while 1: # Daten der Nachricht
if length <= len(self.getData):
data = self.getData[:length]
if length < len(self.getData):
self.getData = self.getData[length:]
else:
self.getData = ''
break
self.getData += self.recv(self.BufSize)
if typ == 'P': data = cPickle.loads(data) # Konvertierung der Daten
return data
> (kann man noch optimieren).
Wenn du weitere Vorschlaege hast...
thx & cu boesi
--
A Achkatz'l ofm Baam #1671 : icq-intern
des hot a schins Laam #73628288 : icq-extern
braucht keen Pfenng Gald boesi111 : aim
un freit sich of dr Walt i171 : reallife
------------------------------
_______________________________________________
python-de maillist - python-de at python.net
http://python.net/mailman/listinfo/python-de
Ende python-de Nachrichtensammlung, Band 12, Eintrag 5
******************************************************
_____________________________________________________________
Free eMail .... the way it should be....
http://www.hablas.com