Il 19/10/2012 17:46, Daniele Varrazzo ha scritto: > On 2012-10-19 16:21, Giovanni Vittorio Spina wrote: >> ciao a tutti ho un problema >> sto facendo un programmetto che avvia dei pc trmite wke on lan >> il protocollo da inviare è >> *s.sendto('\xff'*6+'\x14\xDA\xE9\x11\x15\xC2'*16, >> ("255.255.255.255",9))* >> cioè l'indirizzo broadcast seguito da 16 volte il macaddress e poi la >> netmask >> se scrivo in questa forma funziona perfettamente >> >> io leggo da un file testo che l'utente riempirà con il suo macaddress una >> stringa del tipo >> *macaddress = "14:DA:E9:11:15:C2"* >> quindi eseguo le operazioni sul testo che ho letto: >> *macParts = macaddress.split(":") >> macaddressRightForm="" >> for part in macParts: >> macaddressRightForm +='\x'+part.lower()* >> *MagicPacket = macaddressRightForm*16* >> dopo di che vorrei costruire la stringa da inviare come >> *s.sendto('\xff'*6+MagicPacket, ("255.255.255.255",9))* >> e così non ne vuol sapere di funzionare... >> è come se facesse delle conversioni implicite per il fatto che sono >> valori >> esadecimali >> potete aiutarmi??? >> grazie >> Vittorio > > quando dici es. s.sendto('\xff') non stai mandando una stringa di 4 > caratteri, ma uno solo: il byte con valore 255. Il formato '\xnn' è come > la stringa viene "rappresentata", visto che quei caratteri non sono > stampabili. > > Quindi se hai un macaddress in testo: "14:DA:E9:11:15:C2" penso tu debba > trasformarlo in bytes. Qualcosa come > > In [1]: macaddr = "14:DA:E9:11:15:C2" > > In [4]: ''.join(chr(int(x, 16)) for x in macaddr.split(':')) > Out[4]: '\x14\xda\xe9\x11\x15\xc2' > > Questo *dovrebbe* essere il tuo macaddressRightForm. >
Potresti anche usare il modulo struct: [1] http://code.activestate.com/recipes/358449-wake-on-lan/ [2] http://docs.python.org/library/struct.html LMM _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python