Python Funktionen Linux/Windows

11/01/2009 - 13:17 von Karlheinz Klingbeil | Report spam
Ich habe 2 Fragen, die ich momentan mangels Windows-Rechner leider
nicht selbst klàren kann:

1. Funktioniert glob ( Unix style pathname pattern expansion) auch unter Windows ?
2. funktioniert signal (handlers for asynchronous events), speziell signal.SIGTERM auch unter Windows ?

Hintergrund ist, dass ich grade ein Tool entwickle, dass einen Socket-Server zur Verfügung stellt, der
glob benötigt und nicht nur gestartet, sondern auch bei Bedarf sauber gestoppt werden muss.
Auf meiner Linux-Kiste funktioniert das mit signal, aber ist das auch portabel ?

Achja... noch was
Der Socket-Server kann Python-Module ausführen, die in einem bestimmten Verzeichnis auf dem
Server abgelegt sind.
Dazu wird der ggfs. Suchpfad mittels sys.path.append erweitert und die
Module dann folgendermassen importiert und ausgeführt.

try:
exec('import cmd_' + f + ' as cmd')
reload(cmd)
exec('object = cmd.' + f + '()')
ret_code, ret_type, ret_data = object.run(self.opts['log'], query_type, query_cmd, query_param)

Dem laufenden Server sollen "jederzeit" neue "Befehle" untergeschoben und entnommen werden können, deshalb
erst ein "import" , dann "reload", um auf jeden Fall den aktuellen Befehl ausführen zu können.

Die Frage ist, ist dieses Vorgehen statthaft, pythonic oder gibt es andere, saubere Möglichkeiten das zu tun.

Ich kenn mich nicht so gut mit Python aus, um das beurteilen zu können, deshalb frag ich lieber

Greetz, lunqual - http://www.lunqual.de
http://www.42pixels.de - Bilder
http://www.rezeptbuch-pro.de - Software für den Destillateur
 

Lesen sie die antworten

#1 Marek Kubica
11/01/2009 - 22:29 | Warnen spam
On Sun, 11 Jan 2009 13:17:16 +0100
Karlheinz Klingbeil wrote:

1. Funktioniert glob ( Unix style pathname pattern expansion) auch
unter Windows ?



Ja, in der Doku steht nichts dazu, also tut es. Schimmt auch mit meiner
Erinnerung überein.

Hintergrund ist, dass ich grade ein Tool entwickle, dass einen
Socket-Server zur Verfügung stellt, der glob benötigt und nicht nur
gestartet, sondern auch bei Bedarf sauber gestoppt werden muss. Auf
meiner Linux-Kiste funktioniert das mit signal, aber ist das auch
portabel ?



Dazu würde ich einen Handler für atexit benutzen, so dass wenn ein
Prozess SIGTERM bekommt, er noch cleanup-Sachen ausführen kann. Das
funktioniert wohl so auch unter Windows.

Die Frage ist, ist dieses Vorgehen statthaft, pythonic oder gibt es
andere, saubere Möglichkeiten das zu tun.



Nein, eval und exec in Python sich ziemlich fürchterlich. Wenn du
Module dynamisch zur laufzeit laden willst gibt es ``__import__()``.

grüße,
Marek

Ähnliche fragen