[Python] Salve! Mio primo messaggio e alcune info su Python e OSX
Ciao a tutti, mi sono avvicinato al mondo di python grazie ai libri di Marco Beri e lo trovo un linguaggio particolarmente innovativo, pulito e "semplice". Al momento sto studiando Django, ma non mi dispiacerebbe provare ad usare python per creare una piccola applicazione su MacOSX. Proprio riguardo al secondo punto ho cercato come creare una GUI semplice che più si avvicini ai design classici delle applicazioni su OSX, ma da quanto ho capito non esiste niente di nativo a parte il bridge su cocoa. Qualcuno programma o ha programmato applicazioni su OSX con python? Ciao! -- Karim Gorjux www.gorjux.net www.karimblog.net ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Salve! Mio primo messaggio e alcune info su Python e OSX
2009/10/24 Karim Gorjux : > Proprio riguardo al secondo punto ho cercato come creare una GUI > semplice che più si avvicini ai design classici delle applicazioni su > OSX, ma da quanto ho capito non esiste niente di nativo a parte il > bridge su cocoa. Che detto così è un po' surreale. Non esiste niente di nativo a parte usare le librerie native di OS X. Che per inciso mi suona tautologico. Comunque è così: le cose native si fanno con Cocoa. Con Python puoi chiamare Cocoa. Il modo di procedere è usare la documentazione di Cocoa e leggere nella documentazione di PyObjC le differenze e applicarle volta per volta. -- -enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Salve! Mio primo messaggio e alcune info su Python e OSX
2009/10/24 enrico franchi : > Che detto così è un po' surreale. Non esiste niente di nativo a parte > usare le librerie native di OS X. Che per inciso mi suona tautologico. > Comunque è così: le cose native si fanno con Cocoa. Con Python > puoi chiamare Cocoa. > > Il modo di procedere è usare la documentazione di Cocoa e leggere > nella documentazione di PyObjC le differenze e applicarle volta per > volta. Era solo una curiosità, ma non penso di buttarmi nello sviluppo Cocoa con python. Per ora l'unica buona alternativa per lo sviluppo su Macosx a Cocoa mi sembra REALbasic che ha dei difetti incredibili, ma sono totalmente OT. Grazie per la risposta. Tornando In Topic, al di là della piattaforma, qual é il miglior ambiente RAD per programmare interfacce GUI con python? Grazie! -- Karim Gorjux ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Salve! Mio primo messaggio e alcune info su Python e OSX
On Oct 24, 2009, at 11:14 AM, Karim Gorjux wrote: > Era solo una curiosità, ma non penso di buttarmi nello sviluppo Cocoa > con python. Per ora l'unica buona alternativa per lo sviluppo su > Macosx a Cocoa mi sembra REALbasic che ha dei difetti incredibili, ma > sono totalmente OT. Non considero REALbasic una buona alternativa a Cocoa. Tantomeno a Python. Tra l'altro e' "alternativo" nel senso che tu non vedi Cocoa, non necessariamente almeno. Sotto REALBasic si appoggia a Cocoa. Come ormai quasi tutti. Anche Qt e' una buona opzione. Sicuramente migliore di REALBasic. Per inciso, e' anche chiamabile in Python. > Tornando In Topic, al di là della piattaforma, qual é il miglior > ambiente RAD per programmare interfacce GUI con python? Ambiente RAD? Migliore? :) IMHO stai partendo con il piede sbagliato. Python e' il RAD. ;) Stai cercando "VisualBas.." ehm, VisualPython? Non direi nemmeno che esista... forse qualche progetto ci prova. Eric potrebbe, forse. Una volta avevano fatto dei tentativi, ma sono anni che non seguo lo sviluppo. Ci sono tool per creare le interfacce punta punta click click. Il tool dipende piu' dalla libreria che da Python. Per esempio se lavori con Cocoa, userai InterfaceBuilder, ottimo. Se lavori con Qt, potresti usare il loro designer (che ora mi pare stia nell'ide). Cose analoghe per altre librerie grafiche. Per il resto abbiamo IDE, editor (che sono statisticamente preferiti, credo, almeno fino alla penultima generazione era cosi'). Tra l'altro mi sembra relativamente antistorico chiedere un RAD GUI oggi. Il mondo va verso le interfacce web. I tool classici hanno in genere mostrato diversi limiti nell'impostazione (che porta verso un 2-tier abbastanza ibrido). Fidati... in Python questa esigenza non c'e'. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Salve! Mio primo messaggio e alcune info su Python e OSX
2009/10/24 Enrico Franchi : > Fidati... in Python questa esigenza non c'e'. Grazie Enrico per la risposta. Credo di aver capito cosa intendi. Cocoa usa InterfaceBuilder, ma a me Objective-C proprio non piace. REALBasic usa Carbon, ma ultimamente usa Cocoa cercando di essere allineata con i tempi. Con REALBasic si costruiscono velocemente programmi ad interfaccia gui, ma ho notato che è incasinato e se si vuole qualche libreria, bisogna pagarla. Python è impagabile, comunque hai ragione nel dire che ormai tutto va sulle interfacce web. Penso che adotterò solo più questa soluzione ed ogni tanto RB.. :-) Grazie Enrico per la tua pazienza :-) Buon Weekend -- Karim Gorjux ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] script bash-pipe compatibile
Supponiamo di voler scrivere uno script python che consuma sys.stdin e scrive su sys.stdout, ad esempio: ### $ cat echo.py import sys for line in sys.stdin: sys.stdout.write(line) ### Purtroppo l'implementazione banale non si accoppia bene con altri tools tipo 'head': ### $ python -c "for x in range(200): print 'line'*(x+1)" | python echo.py | head -5 line lineline linelineline linelinelineline linelinelinelineline Traceback (most recent call last): File "echo.py", line 5, in sys.stdout.write(line) IOError: [Errno 32] Broken pipe close failed in file object destructor: <-- da qua in poi a volte c'è a volte no Error in sys.excepthook: Original exception was: ### Ho provato un po' a giocare con try except senza però beccare il punto giusto... Suggerimenti? Matteo Bertini ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
popen? -- Quiero ser el rayo de sol que cada día te despierta para hacerte respirar y vivir en me. "Favola -Moda". ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il 24/10/09 14.43, Giorgio Zoppi ha scritto: > popen? > Non capisco in che modo, non ho sottoprocessi, forse mi sono spiegato male. Per essere più specifici, né ciò che sta davanti né ciò che segue echo.py nella pipeline è vincolato ad essere uno script python, immagina pure: $ cat file-bello-grosso | python echo.py | head file-bello-grosso solo perché l'eccezione viene sollevata al momento del flush() quando sys.stdout è stato chiuso perché 'head' è morto. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il giorno sab, 24/10/2009 alle 15.15 +0200, Matteo Bertini ha scritto: > Il 24/10/09 14.43, Giorgio Zoppi ha scritto: > > popen? > > > Non capisco in che modo, non ho sottoprocessi, forse mi sono spiegato male. già... ho inteso male. m. signature.asc Description: Questa è una parte del messaggio firmata digitalmente ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Matteo Bertini ha scritto: > Supponiamo di voler scrivere uno script python che consuma sys.stdin e > scrive su sys.stdout, ad esempio: > > ### > $ cat echo.py > import sys > for line in sys.stdin: > sys.stdout.write(line) > ### > > Purtroppo l'implementazione banale non si accoppia bene con altri tools > tipo 'head': > > ### > $ python -c "for x in range(200): print 'line'*(x+1)" | python echo.py | > head -5 > line > lineline > linelineline > linelinelineline > linelinelinelineline > Traceback (most recent call last): >File "echo.py", line 5, in > sys.stdout.write(line) > IOError: [Errno 32] Broken pipe > close failed in file object destructor: <-- da qua in poi a > volte c'è a volte no > Error in sys.excepthook: > > Original exception was: > ### > Su Python 2.5.4, Debian Squeeze, ottengo invece (sempre casualmente): Traceback (most recent call last): File "", line 1, in IOError: [Errno 32] Broken pipe oppure: close failed: [Errno 32] Broken pipe > Ho provato un po' a giocare con try except senza però beccare il punto > giusto... > > Suggerimenti? Quale è il problema che hai con questo comportamento? Comunque io non sono riuscito a trovare il metodo per non far chiudere il file descriptor nel distruttore. Ciao Manlio ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il giorno sab, 24/10/2009 alle 14.32 +0200, Matteo Bertini ha scritto: > > Ho provato un po' a giocare con try except senza però beccare il punto > giusto... > > Suggerimenti? > Matteo Bertini > > ___ Ho fatto qualche prova e così dovrebbe funzionare, ma penso anch'io che la soluzione migliore sia popen crap0...@gns01:~/Scrivania$ cat echo2.py import sys def gs (): for line in sys.stdin: yield line if __name__ == '__main__': try: sys.stdout.writelines (gs ()) except IOError: pass crap0...@gns01:~/Scrivania$ python -c "for x in range(200): print 'line'*(x+1)" | python echo2.py | head -n 5 line lineline linelineline linelinelineline linelinelinelineline crap0...@gns01:~/Scrivania$ > > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python -- me -> http://crap0101.gnu-darwin.org signature.asc Description: Questa è una parte del messaggio firmata digitalmente ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il 24/10/09 15.45, Manlio Perillo ha scritto: > Matteo Bertini ha scritto: > >> Supponiamo di voler scrivere uno script python che consuma sys.stdin e >> scrive su sys.stdout, ad esempio: >> >> ### >> $ cat echo.py >> import sys >> for line in sys.stdin: >> sys.stdout.write(line) >> ### >> > Su Python 2.5.4, Debian Squeeze, ottengo invece (sempre casualmente): > > Traceback (most recent call last): >File "", line 1, in > IOError: [Errno 32] Broken pipe > questo è un errore mio nell'esempio (ho due processi python a cui si blocca stdout), meglio: $ python -c "for x in range(200): print 'line'*(x+1)" | sort | python echo.py | head -5 > oppure: > close failed: [Errno 32] Broken pipe > >> Ho provato un po' a giocare con try except senza però beccare il punto >> giusto... >> >> Suggerimenti? >> > Quale è il problema che hai con questo comportamento? > Comunque io non sono riuscito a trovare il metodo per non far chiudere > il file descriptor nel distruttore. > banalmente usare uno scripy python in una pipeline bash come farei con sort, uniq, cat... senza output spurio. Ovvio che in alcuni casi serve avere una eccezione ma mi immagino che ci sia anche un modo facile per ignorarla! ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il giorno sab, 24/10/2009 alle 14.32 +0200, Matteo Bertini ha scritto: > Supponiamo di voler scrivere uno script python che consuma sys.stdin e > scrive su sys.stdout, ad esempio: > > ### > $ cat echo.py > import sys > for line in sys.stdin: > sys.stdout.write(line) > ### > > Purtroppo l'implementazione banale non si accoppia bene con altri tools > tipo 'head': > > ### > $ python -c "for x in range(200): print 'line'*(x+1)" | python echo.py | > head -5 > line > lineline > linelineline > linelinelineline > linelinelinelineline > Traceback (most recent call last): >File "echo.py", line 5, in > sys.stdout.write(line) > IOError: [Errno 32] Broken pipe > close failed in file object destructor: <-- da qua in poi a > volte c'è a volte no > Error in sys.excepthook: > > Original exception was: > ### > > Ho provato un po' a giocare con try except senza però beccare il punto > giusto... #! /usr/bin/python import sys while True: r = sys.stdin.readline() if not r: break try : sys.stdout.write(r) except: break a me funziona... in effetti, per i file grandi _non_ si arriva all'except, per i piccoli sì, e non mi è chiaro perché. Cioè: immagino che per i piccoli dopo che r contiene EOF e viene scritta su stdout, poi stdout non vuole più "write". Ma non capisco perché per i grandi invece non c'è l'exception. boh Pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Il 24/10/09 15.33, crap0101 ha scritto: > Ho fatto qualche prova e così dovrebbe funzionare, ma penso anch'io che > la soluzione migliore sia popen > > crap0...@gns01:~/Scrivania$ cat echo2.py > import sys > > def gs (): > for line in sys.stdin: >yield line > > > if __name__ == '__main__': > try: > sys.stdout.writelines (gs ()) > except IOError: > pass > crap0...@gns01:~/Scrivania$ python -c "for x in range(200): print > 'line'*(x+1)" | python echo2.py | head -n 5 > line > lineline > linelineline > linelinelineline > linelinelinelineline > crap0...@gns01:~/Scrivania$ > Ok, problema caso semplice risolto! Passiamo al caso reale, in realtà la funzione non è così inutile, ma è banale mix tra sort e grep: ### import sys lines = [] for line in sys.stdin: key = line.split()[0] try: lines.append((float(key), line)) except ValueError: pass try: sys.stdout.writelines(line for _, line in sorted(lines)) except IOError: pass ### <--- stesso comportamento scrivendolo con un for e sys.stdout.write(line) che ha come output (spesso...): ### $ python -c "for x in range(400): print (x if x%10 else ''), 'line '*20" > long.list && cat long.list | python bin/mlnsort.py | head -5 | sort -r 5 line line line line line line line line line line line line line line line line line line line line 4 line line line line line line line line line line line line line line line line line line line line 3 line line line line line line line line line line line line line line line line line line line line 2 line line line line line line line line line line line line line line line line line line line line 1 line line line line line line line line line line line line line line line line line line line line close failed in file object destructor: Error in sys.excepthook: Original exception was: ### Per fortuna è su stderr, però mi stupisco non ci sia una soluzione pulita... ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Pietro Battiston ha scritto: > [...] > #! /usr/bin/python > > import sys > > while True: > r = sys.stdin.readline() > if not r: > break > try : > sys.stdout.write(r) > except: > break > > > a me funziona... > A me no. Controlla meglio. Su molti run, a volte ottieni un eccezione. L'eccezione è causata dal runtime di Python, che chiama il distruttore di stdout/stderr, il quale a sua volta chiama close che fallisce. Il problema è che: * non sembra sia possibile evitare che il traceback venga scritto su stderr. Modificare sys.excepthook non funziona * non sembra sia possibile dire a Python che stdout/stderr va considerato chiuso, e che quindi close non va chiamato Credo che questo sia un problema interessante. > [...] Ciao Manlio -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkrjERAACgkQscQJ24LbaUSAaACeJW4Oze88VIunNvlrVey0so9r 5dYAn35BTi3rVLLbffPUcLKLSxdoITLd =magB -END PGP SIGNATURE- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
> > 2009/10/24 Manlio Perillo > > Su molti run, a volte ottieni un eccezione. > L'eccezione è causata dal runtime di Python, che chiama il distruttore > di stdout/stderr, il quale a sua volta chiama close che fallisce. > > Il problema è che: > > * non sembra sia possibile evitare che il traceback venga scritto su > stderr. > Modificare sys.excepthook non funziona > > * non sembra sia possibile dire a Python che stdout/stderr va > considerato chiuso, e che quindi close non va chiamato > > > Credo che questo sia un problema interessante. > c'è un bug "simile" già aperto: http://bugs.python.org/issue7111 msg93946 - (view)Author: Antoine Pitrou (pitrou)Date: 2009-10-13 23:13 > Please note that normally an error message is output, but of course it doesn't display since stderr is invalid :-) > It's clearer if you close stdout instead: > $ ./python -c 'pass' >&- Fatal Python error: Py_Initialize: can't initialize sys standard streams OSError: [Errno 9] Bad file descriptor Abandon > If we want to allow for closed {stdin, stdout, stderr}, I'm not sure what the semantics should be. Should sys.std{in, out, err} be None? Or a file object which always throws an error? > Under Python 2.x, you don't get a crash but the behaviour is quite unhelpful anyway: > $ python -c 'print 1' >&- close failed in file object destructor: Error in sys.excepthook: > Original exception was: > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] script bash-pipe compatibile
Dopo ulteriori indagini, la cosa sembra legata al http://bugs.python.org/issue1488934 in particolare: ### $ cat produce.py import sys for x in range(400): print 'line '*20 if 'flush' in sys.argv: try: sys.stdout.flush() except IOError: if 'pass' in sys.argv: pass else: raise ### ha come effetto: $ python produce.py | head -1 line line line line line line line line line line line line line line line line line line line line Traceback (most recent call last): File "produce.py", line 4, in sys.stdout.write('line '*20+'\n') IOError: [Errno 32] Broken pipe $ python produce.py | head -1 line line line line line line line line line line line line line line line line line line line line close failed in file object destructor: Error in sys.excepthook: Original exception was: <--- random, a volte IOError, a volte errore del distruttore $ python produce.py flush | head -1 line line line line line line line line line line line line line line line line line line line line Traceback (most recent call last): File "produce.py", line 7, in sys.stdout.flush() IOError: [Errno 32] Broken pipe <- "sempre" IOError (ho provato un po' di volte) $ python produce.py flush pass | head -1 line line line line line line line line line line line line line line line line line line line line sempre OK (idem, per un numero N << infinito di prove) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python