[Python] Salve! Mio primo messaggio e alcune info su Python e OSX

2009-10-24 Per discussione Karim Gorjux
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 Per discussione enrico franchi
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 Per discussione Karim Gorjux
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

2009-10-24 Per discussione Enrico Franchi

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 Per discussione Karim Gorjux
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

2009-10-24 Per discussione Matteo Bertini
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

2009-10-24 Per discussione Giorgio Zoppi
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

2009-10-24 Per discussione Matteo Bertini
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

2009-10-24 Per discussione crap0101
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

2009-10-24 Per discussione Manlio Perillo
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

2009-10-24 Per discussione crap0101
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

2009-10-24 Per discussione Matteo Bertini
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

2009-10-24 Per discussione Pietro Battiston
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

2009-10-24 Per discussione Matteo Bertini
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

2009-10-24 Per discussione Manlio Perillo
-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 Per discussione Matteo Bertini
>
> 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

2009-10-24 Per discussione Matteo Bertini
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