Mailslot

Le
Méta-MCI \(MVP\)
Bonjour !

Mailslot étant revenu à la mode dans Vista, par la présence de
l'utilitaire WaitFor.exe, j'ai voulu l'utiliser avec Python.

Or, ce code ne fonctionne pas :

f=open("\\.\mailslot\waitfor.exe\ALERTTEST","wb")
f.writeline("ABC")
f.close()

Traceback (most recent call last):
File "<string>", line 227, in run_nodebug
File "D:Devpythonwaitfor-send.py", line 1, in <module>
f=open("\\.\mailslot\waitfor.exe\ALERTTEST","wb")
IOError: [Errno 2] No such file or directory:
'\\.\mailslot\waitfor.exe\ALERTTEST'


Alors que le code suivant fonctionne sans problème :

import win32com.client
mailslot =
win32com.client.Dispatch('Scripting.FileSystemObject').CreateTextFile('\\.\mailslot\waitfor.exe\ALERTTEST')
mailslot.WriteLine("ABC")
mailslot.close()


Quelqu'un pourrait-il m'expliquer pourquoi Python ne peut pas ouvrir un
fichier mailslot de façon normale ?


@-salutations

Michel Claveau
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Méta-MCI \(MVP\)
Le #660542
Re !

Pour info, le code suivant fonctionne aussi :

import win32file,win32con
mailslot =
win32file.CreateFile(r'\.mailslotwaitfor.exeALERTTEST',
win32file.GENERIC_WRITE, 0, None, win32con.CREATE_NEW, 0, None)
win32file.WriteFile(mailslot, "ABC")
mailslot.Close()

Sinon, petite précision, MailSlot est un IPC (Inter Processus Call), qui
permet de faire communiquer des processus différents (par exemple, deux
instances de Python, deux batchs, un batch et un Python, etc.) Mailslot
ne crée pas de vrai fichier, mais un pseudo-fichier avec UDP et SMB. Du
coup, ça fonctionne aussi en réseau local, ce qui devient encore plus
intéressant.

@+

Michel Claveau
Laurent Pointal
Le #660540
Le Sat, 08 Dec 2007 17:09:09 +0100, Méta-MCI (MVP) a écrit :

Re !

Pour info, le code suivant fonctionne aussi :

import win32file,win32con
mailslot > win32file.CreateFile(r'\.mailslotwaitfor.exeALERTTEST',
win32file.GENERIC_WRITE, 0, None, win32con.CREATE_NEW, 0, None)
win32file.WriteFile(mailslot, "ABC")
mailslot.Close()

Sinon, petite précision, MailSlot est un IPC (Inter Processus Call), qui
permet de faire communiquer des processus différents (par exemple, deux
instances de Python, deux batchs, un batch et un Python, etc.) Mailslot
ne crée pas de vrai fichier, mais un pseudo-fichier avec UDP et SMB. Du
coup, ça fonctionne aussi en réseau local, ce qui devient encore plus
intéressant.

@+

Michel Claveau


Ah, merci. Je savais (vieux cours sur Win32) qu'il existait un truc comme
ça, mais en recherchant dans les docs de l'API vers les mutex, sémaphores
et threads, ils n'apparaissaient pas et je ne me souvenais pas quel nom
ça avait (franchement, 'mail').

Ca va peut-être intéresser quelqu'un... je transmet.



--
Laurent POINTAL -

Publicité
Poster une réponse
Anonyme