2013/12/26 Daniele Zambelli <daniele.zambe...@gmail.com>: > from PIL.Image import open as imopen > > [...] > > def save(self, filename): > """Save graphic window to png or ps file.""" > nfps = filename+'.ps' > nfpng = filename+'.png' > print(nfps, nfpng) > self._canvas.postscript(file=nfps) > imopen(nfps).save(nfpng) > os.remove(nfps) > > Chiamo il metodo con il comando: > > [...] > p.save('esagono') > [...] > > (dove "p" è un oggetto della classe che contiene "save") > quando il metodo viene eseguito sotto Python 2.7 funziona, qundo lo > eseguo sotto Python 3.3 ottengo: > > TypeError: must be str, not bytes
Sembra un bug di Pillow... os.popen apre un fd che s'aspetta di ricevere testo unicode (così sui 2 piedi non ho trovato l'opzione per aprirlo come binary) subprocess invece si aspetta di ricevere un buffer (bytes support l'interfaccia buffer, le unicode str no) ho provato a modificare al volo il codice di Pillow 2.2.2 nel mio site-packages e sembra funzionare con la patch allegata per applicarla, vai nel tuo PIL in site-packages ( per esempio, `cd (pew sitepackages_dir)/PIL` ) ed esegui patch -p0 EpsImagePlugin.py eps.patch (magari cancella anche __pycache__ ) la patch è abbastanza grezza, il codice potrebbe beneficiare di un po' di refactoring avrei anche dovuto controllare che il bug non sia già stato riportato (e magari fixato in master), ma dove sono ora al momento la connessione fa un po' schifio (altrimenti, una volta ripulita la patch, bisognerebbe mandarla upstream)
24a25 > import subprocess 71c72 < "- >/dev/null 2>/dev/null"] --- > "-"] 79,80d79 < command = " ".join(command) < 83c82 < gs = os.popen(command, "w") --- > gs = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) 86c85 < gs.write("%d %d translate\n" % (-bbox[0], -bbox[1])) --- > gs.stdin.write(("%d %d translate\n" % (-bbox[0], -bbox[1])).encode()) 93,94c92,94 < gs.write(s) < status = gs.close() --- > gs.stdin.write(s) > status = gs.stdin.close() > gs.wait()
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python