Re: [Python] suggerimenti applicazione python

2020-04-03 Per discussione Riccardo Brazzale
Ciao,

guarda qua:

https://www.genropy.org/

Ci sono tutti i tutorial online:
https://www.youtube.com/channel/UCo_uET2jv2kVuZpzpYydZ7Q

Devi studiacchiare un po' (veramente poco per partire)  ma poi fai quello
che vuoi, senza preoccuparti di troppe cose...


Il giorno gio 2 apr 2020 alle ore 17:20 Andrea D'alessandro <
andrea.dalessan...@ingv.it> ha scritto:

> Salve a tutti,
> Avrei bisogno di qualche suggerimento.
> Ho dei sensori installati in alcuni pozzi che ogni giorno inviano una mail
> con i dati in allegato.
> Sono 2 file, in uno si trova data, ora, pressione, temperatura, e
> conducibilità dell' acqua, ed in un altro data ora pressione e temperatura
> del sensore che si trova all esterno del pozzo.
> Volevo fare un applicazione che si scarica gli allegati, si prende i dati,
> li mette su un database e consentire la visualizzazione di grafici via web.
> Programmo in python sostanzialmente per raspberry e di competenze sulla
> programmazione web ne ho poche.
> Se qualcuno avesse suggerimenti e mi indicasse una via, in modo da non
> farmi andare a ficcare in un vicolo cieco gli sarei veramente grato.
> Volevo provare mongoDB come database e Django come framework, ma credo che
> per questo tipo di dati sia meglio un db sql.
>
>
> Saluti
> Andrea
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>


-- 
*Usa Software Libero *

Riccardo
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Problema Mail : Missing required header field: "Date"

2015-10-19 Per discussione Riccardo Brazzale
Grazie Mauro,

credo di aver risolto, come suggerito da Riccardo Lemmi.

In realtà, ho visto che nella RFC 5332 si parla esplicitamente di data ma
non ho capito se quanto esposto nella RFC è sempre obbligatorio.
In questo caso mi aspetterei che il modulo smtplib aggiungesse in
automatico la data necessaria se non esplicitamente dichiarata ovvero:
se la dichiaro viene usata quella dichiarata, altrimenti il modulo la mette
di suo dato che è obbligatoria.

Poi come detto nel primo messaggio mi pare di capire che la strgrande
maggioranza dei server se ne frega bellamente di questa data ma
qualcuno, che fa controlli un pò più sofisticati sull'heder della mail, se
non trova si arrabbia e la rispedisce la mail al mittente.

Grazie comunque a tutti.

Buona giornata!


Il giorno 16 ottobre 2015 10:15, mauro <ma...@nonsolocomputer.com> ha
scritto:

>
> Il giorno 16 ott 2015, alle ore 08:57, Riccardo Brazzale <
> riccardo.brazz...@gmail.com> ha scritto:
>
> Premetto che non so se il problema sta dalla parte di python ma ci provo,
> non vorrei che bastasse un niente sul codice e il problema scompare
>
> Ho questo programma che manda a destra e a manca dei documenti pdf:
>
>
> dico una bischerata: ma se il campo Date lo aggiungi tu, al pari di
> Subject e soci?
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>


-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Problema Mail : Missing required header field: "Date"

2015-10-16 Per discussione Riccardo Brazzale
Ciao a tutti.

Premetto che non so se il problema sta dalla parte di python ma ci provo,
non vorrei che bastasse un niente sul codice e il problema scompare

Ho questo programma che manda a destra e a manca dei documenti pdf:

msg = MIMEMultipart()
msg['From'] = mailfrom
msg['To'] = to
msg['Subject'] = subject
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
   'attachment; filename="%s"' %
os.path.basename(attach))
testa = text
piede = footer
part1 = MIMEText(testa, 'html')
part2 = MIMEText(piede, 'html')
msg.attach(part)
msg.attach(part1)
msg.attach(part2)
server.sendmail(mailusername, to, msg.as_string())
server.quit()

Ho dei rarissimi casi in cui mi torna questo:

The message WAS NOT relayed to:

<a...@acme.com <i...@bizeta-macchinehf.it>>:

554 5.6.0 bounce, id=24119-12 - bad header

This nondelivery report was generated by the program amavisd-new at host

s2.asws3.com. Our internal reference code for your message is

24119-12/qf8Mkr96lFAq

INVALID HEADER
Missing required header field: "Date"

Googlando in giro ho trovato che amavisd fa di queste cose ma non ho
trovato un workaround per risolvere tranne quello che il destinatario debba
mettere le mani sulle configurazioni di spamassasin e amavisd.

Ho qualche speranza?

Grazie

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problema Mail : Missing required header field: "Date"

2015-10-16 Per discussione Riccardo Brazzale
Provo.

Grazie mille!!

2015-10-16 10:58 GMT+02:00 Riccardo Lemmi <ricca...@reflab.com>:

> Riccardo Brazzale wrote:
>
> > Ciao a tutti.
> >
> > Premetto che non so se il problema sta dalla parte di python ma ci
> > provo, non vorrei che bastasse un niente sul codice e il problema
> > scompare
> >
> > Ho questo programma che manda a destra e a manca dei documenti pdf:
> >
> > msg = MIMEMultipart()
> > msg['From'] = mailfrom
> > msg['To'] = to
> > msg['Subject'] = subject
> > part = MIMEBase('application', 'octet-stream')
> > part.set_payload(open(attach, 'rb').read())
> > Encoders.encode_base64(part)
> > part.add_header('Content-Disposition',
> >'attachment; filename="%s"' %
> > os.path.basename(attach))
> > testa = text
> > piede = footer
> > part1 = MIMEText(testa, 'html')
> > part2 = MIMEText(piede, 'html')
> > msg.attach(part)
> > msg.attach(part1)
> > msg.attach(part2)
> > server.sendmail(mailusername, to, msg.as_string())
> > server.quit()
> >
> > Ho dei rarissimi casi in cui mi torna questo:
> >
> > The message WAS NOT relayed to:
> >
> > <a...@acme.com <i...@bizeta-macchinehf.it>>:
> >
> > 554 5.6.0 bounce, id=24119-12 - bad header
> >
> > This nondelivery report was generated by the program amavisd-new at
> > host
> >
> > s2.asws3.com. Our internal reference code for your message is
> >
> > 24119-12/qf8Mkr96lFAq
> >
> > INVALID HEADER
> > Missing required header field: "Date"
> >
> > Googlando in giro ho trovato che amavisd fa di queste cose ma non ho
> > trovato un workaround per risolvere tranne quello che il destinatario
> > debba mettere le mani sulle configurazioni di spamassasin e amavisd.
> >
> > Ho qualche speranza?
> >
> > Grazie
> >
>
> Hai provato ad aggiungere l'header mancate?
>
>  msg['Date'] = time.asctime()
>
>
> --
>Riccardo Lemmi
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Per gli esperti di sql

2015-05-14 Per discussione Riccardo Brazzale
Ciao,

Mi connetto a un database mysql con mysql.connector ma potrebbe essere
qualsiasi altro motore DB. So che PG sarebbe passerebbe più innosservato in
questa ML :-)

Faccio una semplice sql:

sql = SELECT * FROM table WHERE campo 1 = %s AND campo2 = %s

curs.execute(sql, (var1, var2, ))

Fin qui tutto ok.

Ora ipotizziamo che l' sql stia all'interno di un ciclo che sta girando su
svariate centinaia di migliaia di combinazioni di var1 e var2 ed a un certo
punto fallisca in quanto var1 o var2 contengono valori che non vanno bene
per il rispettivo campo.

Come faccio a fare una cosa del tipo:

try:
curs.execute(sql, (var1, var2, ))

except:

print(ultima_istruzione_sql_eseguita)

in modo che ultima_istruzione_sql_eseguita sia
SELECT * FROM table WHERE campo1 = 'ABCDEF' AND campo2 = '\x3BRGF'?


Mettere nell'except una roba del tipo print(var1, var2) potrebbe starci se
hai 2 valori ma l'sql contiene in realtà centinaia di campi e avere la
stringa sql in chiaro risulterebbe (per me) più leggibile in quanto ha il
campo associato al valore.

Ho googlato in giro, qualcuno parla di cursor.statement ma a me non funza.

Grazie!



-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Sono incartato (hex to ascii?)

2015-01-28 Per discussione Riccardo Brazzale
Il giorno 28 gennaio 2015 13:55, Robotica li...@robotica.it ha scritto:

 m'è venuto un brivido da sudore freddo
 ora è passato


Non colsi l'ironia.
Puoi spiegare?

Grazie


-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Sono incartato (hex to ascii?)

2015-01-28 Per discussione Riccardo Brazzale
Ciao a tutti,

vi pongo la seguente questione: ho un' sql che reperisce dati da un
database che li mette a disposizione in questo formato:

bytearray(b'\xf1\xf5\xf0\xf1\xf2\xf3'), (bytearray(b'@@')

Ora partiamo dal seguente assunto:

Si tratta di un campo data che può essere valorizzato oppure vuoto.

Nel primo caso la data e' 23/01/15 e nel secondo caso la data non è
valorizzata.

Come posso normalizzare, rendere cioe' human readable i dati?

Ho fatto vari esperimenti con struct, binascii ed altro senza venirne a
capo.

Semplicemente, potrei analizzare la stringa e dedurre i valori (se = xF1
allora 1, se XF4 allora 4, se @ allora vuoto) ma non piace a nessuno.


Grazie

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Sono incartato (hex to ascii?)

2015-01-28 Per discussione Riccardo Brazzale
Grazie Carlos,

Ho risolto

Il db è DB2/400 (iseries IBM) al quale mi attacco via pyodbc con il
connettore nativo di IBM.

L'sql è banale:

c = dbase.open.iseries().cursor()  # modulo che mi restituisce il cursore.
s = SELECT * FROM LIBRERIA.TABELLA
c.execute(sql)
d = c.fetchall()


A questo punto d contiene i dati che hai visto.

Avevo tralasciato che la codifica su AS400 (iseries) e' EBCDIC e python sa
cosa fare!:

 s = bytearray(b'\xf1\xf5\xf0\xf1\xf2\xf3')
 s.decode(cp1140).encode(ascii)
'150123'

https://docs.python.org/2/library/codecs.html


Grazie lo stesso!


Il giorno 28 gennaio 2015 10:44, Carlos Catucci carlos.catu...@gmail.com
ha scritto:


 2015-01-28 10:35 GMT+01:00 Riccardo Brazzale riccardo.brazz...@gmail.com
 :

 vi pongo la seguente questione: ho un' sql che reperisce dati da un
 database che li mette a disposizione in questo formato:

 bytearray(b'\xf1\xf5\xf0\xf1\xf2\xf3'), (bytearray(b'@@')

 Ora partiamo dal seguente assunto:

 Si tratta di un campo data che può essere valorizzato oppure vuoto.

 Nel primo caso la data e' 23/01/15 e nel secondo caso la data non è
 valorizzata.

 Come posso normalizzare, rendere cioe' human readable i dati?

 Ho fatto vari esperimenti con struct, binascii ed altro senza venirne a
 capo.

 Semplicemente, potrei analizzare la stringa e dedurre i valori (se = xF1
 allora 1, se XF4 allora 4, se @ allora vuoto) ma non piace a nessuno.


 A naso direi che il prmo caso sia una codifica (suppongo utf-8, ma non ho
 controllato). Il fatto che il vuoto sia riepito di '@' invece mi pare
 strano.
 Attendo che i guru si pronuncino, ma magari sapere altre cose sarebbe
 utile:

 che db?
 come ottieni il risultato? Un esempio di query (in python) sarebbe
 opportuno
 usi una connettore particolarper il db?
 oppure un ORM?

 Carlos
 --
 EZLN ... Para Todos Todo ... Nada para nosotros

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Risolto? wxpython thread

2015-01-07 Per discussione Riccardo Brazzale
Il giorno 22 dicembre 2014 14:30, Manlio Perillo manlio.peri...@gmail.com
ha scritto:

 Non c'è modo (sano) di terminare un thread in questo stato, come con i
 processi.
 Quello che devi fare è mandare degli eventi al thread, e gestirli nella
 funzione run,
 ma non ho idea di come si faccia in Wx.


Allora,

senza impazzire, dato che mi aspetto che la mia run ritorni qualcosa nel
momento in cui ha finito e mandato la mail, ho messo un paio di try per
controllare che i dati restituiti da wx.PostEvent vengano ignorati se nel
frattempo il pgm è stato chiuso.

Forse non è il massimo ma funziona e il programma non crasha più.

Grazie.


-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] wxpython thread

2014-12-22 Per discussione Riccardo Brazzale
Ciao a tutti,

sto cercando di capire come gestire un thread avviandolo con wxpython.
Ho trovato questo:

import time
import wx

from threading import Thread

# Define notification event for thread completion
EVT_RESULT_ID = wx.NewId()

def EVT_RESULT(win, func):
Define Result Event.
win.Connect(-1, -1, EVT_RESULT_ID, func)

class ResultEvent(wx.PyEvent):
Simple event to carry arbitrary result data.
def __init__(self, data):
Init Result Event.
wx.PyEvent.__init__(self)
self.SetEventType(EVT_RESULT_ID)
self.data = data


class TestThread(Thread):
Test Worker Thread Class.

#--
def __init__(self, wxObject):
Init Worker Thread Class.
Thread.__init__(self)
self.wxObject = wxObject
self.start()# start the thread

#--
def run(self):
Run Worker Thread.
# This is the code executing in the new thread.
for i in range(6):
time.sleep(10)
amtOfTime = (i + 1) * 10
wx.PostEvent(self.wxObject, ResultEvent(amtOfTime))
time.sleep(5)
wx.PostEvent(self.wxObject, ResultEvent(Thread finished!))


class MyForm(wx.Frame):

#--
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, Tutorial)

# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.displayLbl = wx.StaticText(panel, label=Amount of time since
thread started goes here)
self.btn = btn = wx.Button(panel, label=Start Thread)

btn.Bind(wx.EVT_BUTTON, self.onButton)

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.displayLbl, 0, wx.ALL|wx.CENTER, 5)
sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)

# Set up event handler for any worker thread results
EVT_RESULT(self, self.updateDisplay)

#--
def onButton(self, event):

Runs the thread

TestThread(self)
self.displayLbl.SetLabel(Thread started!)
btn = event.GetEventObject()
btn.Disable()

#--
def updateDisplay(self, msg):

Receives data from thread and updates the display

t = msg.data
if isinstance(t, int):
self.displayLbl.SetLabel(Time since thread started: %s
seconds % t)
else:
self.displayLbl.SetLabel(%s % t)
self.btn.Enable()

#--
# Run the program
if __name__ == __main__:
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()

Pare funzionare, anche se ci sono cose che per me sono misteriose...

Tuttavia, come faccio a terminare il thread avviato una volta che clicco la
x di chiusura o che metto lì un pulsante chiudi?

Tenete presente che il tutto è sotto windows.

Quello che succede (anche se non sempre) è che chiudendo, il programma va
in crash probabilmente proprio per il fatto che il thread rimane vivo e
tenta di restituire qualcosa che non è più possibile restituire.

Grazie a tutti.

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] wxpython thread

2014-12-22 Per discussione Riccardo Brazzale
Grazie Manlio,

Mi sono chiesto: chi ama infinitamente i python thread nella mailing list?
Quella persona sarà certamente quella che verrà a darmi una mano [?] :-)!

Ti ringrazio!

Ti confesso che non ci capisco molto ma ci provo.

All'interno del run reale non c'e' altro che un ciclo for di invio mail
(qualche centinaio).

Fino ad ora ero riuscito a mettere in piedi qualcosa che funziona bene ma
blocca ovviamente l'interfaccia.

Adattando il codice che ho postato, tutto va molto meglio tranne, ripeto,
quando tento di fermare il processo di invio,

Devo mettermi a studiare oltre, mi pare non ci siano alternative.

Vedo se riesco ad adattare ulteriormente sfruttando, come dici tu, una
queue.

Grazie comunque.




Il giorno 22 dicembre 2014 14:30, Manlio Perillo manlio.peri...@gmail.com
ha scritto:

 On Mon, Dec 22, 2014 at 12:09 PM, Riccardo Brazzale 
 riccardo.brazz...@gmail.com wrote:

 Ciao a tutti,

 sto cercando di capire come gestire un thread avviandolo con wxpython.


 Buona fortuna!


 Ho trovato questo:

 import time
 import wx

 from threading import Thread


  [...]



 #--
 def run(self):
 Run Worker Thread.
 # This is the code executing in the new thread.
 for i in range(6):
 time.sleep(10)
 amtOfTime = (i + 1) * 10
 wx.PostEvent(self.wxObject, ResultEvent(amtOfTime))
 time.sleep(5)


 Ovviamente se fai una sleep blocchi tutto il thread.
 Non c'è modo (sano) di terminare un thread in questo stato, come con i
 processi.
 Quello che devi fare è mandare degli eventi al thread, e gestirli nella
 funzione run,
 ma non ho idea di come si faccia in Wx.

 Dovresti postare la tua funzione run reale, per capire come organizzare il
 codice.
 Ad esempio potresti usare una threading.Queue.
 Passa la queue allo stesso modo in cui passi wxObject.

  [...]


 Tuttavia, come faccio a terminare il thread avviato una volta che clicco
 la x di chiusura o che metto lì un pulsante chiudi?


 Come detto, devi notificare in qualche modo il thread.
 A meno che wx non abbia qualcosa di molto conveniente disponibile, usa
 una queue.


 Tenete presente che il tutto è sotto windows.

 Quello che succede (anche se non sempre) è che chiudendo, il programma va
 in crash probabilmente proprio per il fatto che il thread rimane vivo e
 tenta di restituire qualcosa che non è più possibile restituire.


 Quando usi i thread è difficile capire cosa non va.
 Prova a loggare i vari stati dell'applicazione, per vedere se
 effettivamente il main thread termina
 prima del worker thread.

 Un bug del codice sicuramente è quello di non fare il .join del thread.
 Per evitare di bloccare l'interfaccia, passa un timeout basso e poi
 richiamalo
 ad intervalli regolari usando un timer.
 Esci dall'applicazione solo quando tutti i thread sono terminati.

  [...]

 Ciao  Manlio

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Problema refresh wx

2014-12-02 Per discussione Riccardo Brazzale
Ciao a tutti,

ho fatto uno script su windows che prende i file di una determinata
directory e tenta l'invio via mail con un ciclo.
Funziona ma ho il seguente problema:
a video (wx) mostra una serie di statistiche sull'invio (numero file
inviati, file rimanenti etc) che vengono aggiornate a ogni ciclo.
Dopo un po che pompa mail,entra in funzione lo screen saver, al rientro
il refresh dei dati non funziona più (sulla barra vedo non risponde) ma
in realtà il programma sta ancora funzionando.

Ho visto che il problema si presenta anche se nel frattempo faccio
qualcos'altro e poi riprendo la videata che mostra le statistiche: anche in
questo caso il refresh della videata smette di funzionare.

Idee?


Grazie.

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problema refresh wx

2014-12-02 Per discussione Riccardo Brazzale
Il giorno 2 dicembre 2014 19:36, Francesco Pischedda 
francesco.pische...@gmail.com ha scritto:

 non sapendo come hai strutturato il tuo programma


Il codice è qui:


http://pastebin.com/hGY3Jd6a

Grazie comunque.


-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e saturazione CPU

2014-11-21 Per discussione Riccardo Brazzale
Il giorno 21 novembre 2014 00:03, Enrico Bianchi enrico.bian...@ymail.com
ha scritto:


  Per la chiusura dei file, suggerirei di usare il costrutto with:

 with open(filein, 'r') as fin, open(writeto + fileout, w) as fou:
 #resto del codice


Per prima cosa GRAZIE a tutti.

Il problema, come sospettavo, in realta' era sulla vm. Ho abilitato
l'accelerazione 3D per lo schermo e il problema e' sparito.

Ciao.

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Python e saturazione CPU

2014-11-19 Per discussione Riccardo Brazzale
Ciao a tutti,

Trovo sempre ispirazione ma soprattutto soluzioni in questo forum.

Mi scontro con il seguente problema:

Macchina virtuale con XP (non uccidetemi) sopra una Debian su I5 con 4 gb
di ram.
La macchina virtuale è limitata a 1 cpu con 1,5 gb ram.

Ho uno script python dentro XP che apre un file testuale da 1,2 mb (scarsi)
e fa una readlines()

Poi usa alcune cose di wx (una wx.ProgressDialog)

Da li parte con un ciclo for all' interno di readlines per leggere tutte le
righe e con queste produrre
altri documenti txt. In soldoni: prende il file grande e ne fa tanti di
piccoli in base ai contenuti delle righe.

Ora il tutto funziona egregiamente tuttavia:

All'inizio è una scheggia, ma mano a mano che l'elaborazione procede la cpu
si satura e il tutto entra in agonia e non finisce mai (un minuto per
elaborare 50 righe) e dovendo elaborare 25/30 mila righe impiega ore.

Mi pare strano tanto che ho tolto la readlines() e ho impostato un
readline() per leggere una riga alla volta anziché caricare tutto in
memoria tanto per vedere se la situazione cambiava ma niente. Tale e quale.

Mi sa tanto da problema sulla virtuale.

Cosa suggerite?

Grazie per il vostro tempo.

-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e saturazione CPU

2014-11-19 Per discussione Riccardo Brazzale
Il giorno 19 novembre 2014 16:59, Simone Federici s.feder...@gmail.com ha
scritto:


 posta il codice :-)


Eccolo: abbiate pietà di me

http://pastebin.com/efhwxeTq

Grazie.


-- 
Riccardo Brazzale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Gestione delle date

2014-10-15 Per discussione Riccardo Brazzale
Ciao a tutti,

mi trovo a dover gestire una data, proveniente da un db mysql, nel formato
windows seriale.

Come esempio trovo che:

39690 = 30/08/08
40849 = 02/11/11

ora:

Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type help, copyright, credits or license for more information.
 from datetime import datetime
 dt = datetime.fromordinal(39690)
 datetime.isoformat(dt)
'0109-09-01T00:00:00'
 dt = datetime.fromordinal(40849)
 datetime.isoformat(dt)
'0112-11-03T00:00:00'



Qualcosa non mi torna perché evidentemente canno la gestione.

Qual è il procedimento corretto?

Grazie!


-- 
Riccardo Brazzale
Linux User #299418
Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Gestione delle date

2014-10-15 Per discussione Riccardo Brazzale
Il giorno 15 ottobre 2014 16:12, Daniele Varrazzo p...@develer.com ha
scritto:

 La data seriale di windows evidentemente usa uno zero diverso da quello
 di Python:

  import datetime
  datetime.date(2008,8,30).toordinal()
 733284

 Puoi verificare che le due epoche, quella di Python e quella di Windows
 sono costanti, partendo dai tuoi due esempi:

  datetime.date(2008,8,30).toordinal() - 39690
 693594

  datetime.date(2011,11,2).toordinal() - 40849
 693594

 Quindi basta aggiungere questo offset:

  def date_from_winserial(n):
 ... return datetime.date.fromordinal(n + 693594)

  date_from_winserial(39690)
 datetime.date(2008, 8, 30)

  date_from_winserial(40849)
 datetime.date(2011, 11, 2)

 Curiosita': quale zero usa windows?

  date_from_winserial(0)
 datetime.date(1899, 12, 30)

 E che data e'? Con questa data credo che 1 corrisponda al 1/1/1900 se si
 include il bug di considerare il 1900 come un anno bisestile (che
 semplifica l'algoritmo di ricerca degli anni bisestili a anno  3 == 0 e
 funziona bene dal 1901 al 2099). Le date dal 1/1 al 27/2/1900 sono
 sbagliate ma le altre vanno bene, che e' un'approssimazione sufficiente per
 gli standard pragmatici di Microsoft e le ristrettezze dell'hardware per
 cui le prime versioni di Excel erano scritte. Archeologia informatica...


Grazie!



-- 
Riccardo Brazzale
Linux User #299418
Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Problema os.rename

2014-10-11 Per discussione Riccardo Brazzale
Ciao a tutti,

ho messo in piedi un piccolo sw che prende un file testo, lo spezza in
tanti sottofile, li converte in pdf e li manda via mail.

Prima mando il file:

 server.sendmail(mailusername, to, msg.as_string())
server.quit()

successivamente, sposto il file pdf in una directory diversa:

os.rename(oggettoda, oggettoa)

Ora su linux tutto ok, nessun problema.

Su Windows 7 il programma va in palla quando tenta di rinominare:

Traceback (most recent call last):
  File C:/Users/Utente/Desktop/FT/senddoc.py, line 171, in Converti
os.rename(oggettoda, oggettoa)
WindowsError: [Error 32] Impossibile accedere al file. Il file � utilizzato
da un altro processo

Come posso tentare di risolvere?

Grazie.

-- 
Riccardo Brazzale
Linux User #299418
Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problema os.rename

2014-10-11 Per discussione Riccardo Brazzale
Grazie.

La questione è:
come posso sapere quando il file non è più usato da nessun altro processo?

Ho provato a mettere un ritardo di 10 secondi dopo il sendmail ma ancora
niente...



Il giorno 11 ottobre 2014 15:44, Manlio Perillo manlio.peri...@gmail.com
ha scritto:

 2014-10-11 15:24 GMT+02:00 Riccardo Brazzale riccardo.brazz...@gmail.com
 :

 Ciao a tutti,

 Ciao


 successivamente, sposto il file pdf in una directory diversa:

 os.rename(oggettoda, oggettoa)

 Ora su linux tutto ok, nessun problema.

 Su Windows 7 il programma va in palla quando tenta di rinominare:

 Traceback (most recent call last):
   File C:/Users/Utente/Desktop/FT/senddoc.py, line 171, in Converti
 os.rename(oggettoda, oggettoa)
 WindowsError: [Error 32] Impossibile accedere al file. Il file �
 utilizzato da un altro processo

 Come posso tentare di risolvere?


 Windows funziona abbastanza diversamente da un sistema UNIX, in casi come
 questo.
 L'unica soluzione è aspettare che il file non sia usato da nessun altro
 processo, processo che immagino sia stato avviato da te.

 http://technet.microsoft.com/en-us/sysinternals/bb897556


 Ciao  Manlio

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
Linux User #299418
Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Esclusione della query vuota

2014-09-11 Per discussione Riccardo Brazzale
Scusate, conosco python ma non in maniera cosi' approfondita.

Ma :

import MySQLdb as my

stringa = Daniele'; DROP TABLE rubrica; --
stringa = my.escape_string(stringa)

sql = ... %s ...
c.execute(sql, (stringa))


... non risolve il problema?



Il giorno 11 settembre 2014 11:04, Marco Beri marcob...@gmail.com ha
scritto:

 2014-09-11 9:07 GMT+02:00 Juri Rudi rudij...@gmail.com:

 Nel mio caso (script per hobby finalizzato ad un a rubrichetta off line
 che utilizzo solo io), attuare PRIMA DI OGNI COSA la sanitizzazione delle
 tabelle contro sql injection sarebbe assurdo.


 Fidati: non e` assurdo.

 Non insistero` oltre ma, davvero, fidati (l'esempio di Giovanni e la lista
 di avvocati regge benissimo).

 Ciao.
 Marco.

 --
 http://beri.it/ - Un blog
 http://beri.it/i-miei-libri/ - Qualche libro


 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
Linux User #299418
Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] [Risolto] Reportlab: Misteri?

2014-01-24 Per discussione Riccardo Brazzale
Mi rispondo da solo.

Probabilmente è un problema di quel dato pc.
Ho risolto dicendo alla stampante di andare dritta alla stampa senza
passare per lo spool, meno efficente ma stampa corretta!

Grazie!



Il giorno 18 gennaio 2014 09:01, Riccardo Brazzale 
riccardo.brazz...@gmail.com ha scritto:

 Ciao a tutti,

 Ho realizzato uno script che genera una pagina pdf contenente varie cose
 con ReportLab.

 La visualizzazione del pdf è perfetta.

 Tuttavia quando mando in stampa (windows xp) succede che se le pagine
 hanno caratteri illeggibili.

 Leggendo in giro ho visto che (giustamente, dato che uso font times e
 helvetica) potrebbe essere un problema di font.

 Quello che mi chiedo è:

 Perche' ogni tanto(random ma soprattutto la prima) le pagine escono
 stampate correttamente?

 E perche' se la stampa la genero su un altro pc (sempre windows xp) le
 pagine escono tutte esatte?

 Come posso risolvere?

 Grazie

 --
 Riccardo Brazzale
 Linux User #299418 Linux Machine #184578




-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] xlwt

2013-11-28 Per discussione Riccardo Brazzale
Il giorno 26 novembre 2013 21:10, Dario Bertini berda...@gmail.com ha
scritto:

 questo è limitato fino alla Z, se ti servono anche indici che superano
 il 25 ovviamente bisogna cambiare qualcosa


E' proprio questo il punto.
Ma per il momento basta fino alla Z.

Grazie!



-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] xlwt

2013-11-26 Per discussione Riccardo Brazzale
Ciao a tutti,

sto tentando di mettere in piedi uno scipt che partendo da database un
mysql mette i dati su un foglio .xls

Mi sono dato da fare a leggere un po' di documentazione in giro e ho
trovato tante risposte ai miei quesiti.

Tranne una:

Devo inserire alcune formule che possono capitare sparse in giro per il
foglio.

Ora mi pare di capire che le formule devono essere passate a xlwt nella
forma xlwt.Formula('SUM($A$1:$A$10)')  (Ad esempio).

Che voi sappiate esiste un modo per dire a xlwt di usare ('SUM(0,0:0,9)')
in luogo della posizione letterale?.(Si dice cosi'?)

O in alternativa: come posso convertire le posizioni assolute (0,0:0,9) in
($A$1:$A$9) in maniera semplice?

Grazie!



-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] R: Help Tkinter

2013-11-19 Per discussione Riccardo Brazzale
Il giorno 19 novembre 2013 09:50, Attilio Menegon 
attilio.mene...@tecnoemmesnc.it ha scritto:


 self.listbox1.update()


Grazie!!





-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Help Tkinter

2013-11-17 Per discussione Riccardo Brazzale
Ciao a tutti,

Ho definito un pulsante su un contenitore la cui pressione scatena questo:


def pulsante1Premuto(self, evento):
   for i in range (1, 10):
self.listbox1.insert(END, str(i))
time.sleep(1)

Ora mi aspetto che nella mia listbox appaia un numero circa ogni secondo.

Cio non accade, i numeri vengono scritti tutti contemporanelamente dopo
circa 10 secondi.

Quindi mi pare di capire che *prima* finisce il ciclo e *poi* scrive.

Come posso ottenere la scrittura ogni decimo di secondo?

Grazie.

-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] ReportLab e Barcode 128

2013-11-11 Per discussione Riccardo Brazzale
Ciao a tutti,

Ho creato un piccolo report con Reportlab nel quale devo inserire un
barcode di tipo 128

Funziona tutto ma non riesco a regolare le dimensioni del barcode (altezza
e larghezza).

Qualche idea?

Grazie mille!!


-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] ReportLab e Barcode 128

2013-11-11 Per discussione Riccardo Brazzale
Il giorno 11 novembre 2013 21:39, Nadir Sampaoli
nadirsampa...@gmail.comha scritto:


 Non avendo idea di cosa fosse Reportlab l'ho cercato su google e ho
 trovato questo:

 http://fossies.org/dox/reportlab-2.7/classreportlab_1_1graphics_1_1barcode_1_1code128_1_1Code128.html
 Puoi vedere che Code128 ha, fra gli attributi, barHeight e barWidth.


Questo mi era sfuggito.
Avevo visto height e width che pero' non sortivano l'effetto sperato.

Grazie mille!





-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-05 Per discussione Riccardo Brazzale
Il giorno 04 novembre 2013 16:11, Manlio Perillo
manlio.peri...@gmail.comha scritto:


 import sys
 import select


 # ... open serial port, init curses
 while 1:
rfd, wfd, efd = select.select([stdin, conn], [], [], 0)
if conn in rfd:
 dati = conn.read(64)
 # ... aggiorna schermo e file dati
if stdin in rfd:
 cmd = stdin.read()
 if cmd.strip().lower() == q:
 # ... salva il file excel
 break
 # close serial port, close curser


Ho cercato di sistemarlo un po', ne è uscito questo e pare funzionare ma
devo testarlo in loco per cantare vittoria:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import curses
import time
import serial
import xlwt
import sys
import select

def aprischermo():

stdscr = curses.initscr()
curses.noecho()
titolo = 'Ricezione Dati'
pos = int (40 - (len(titolo))/2)
stdscr.addstr(1, pos, titolo, curses.A_REVERSE | curses.A_BOLD)
stdscr.addstr(7, 5, Lettura -- Pressione -- Flusso - Permeabilita',
curses.A_BOLD)
stdscr.addstr(15, 5, 'Premi   per uscire')
stdscr.addstr(15, 11, 'Q', curses.A_REVERSE | curses.A_BOLD)
stdscr.addstr(5, 5, 'Dati Ricevuti:', curses.A_BOLD)
stdscr.refresh()
return stdscr

def connessione(stdscr):

try:
#conn = serial.Serial(/dev/ttyUSB0, 9600, 7, N, 1, timeout=1)
 # -- Senza connessione esce...
conn = serial.Serial(/dev/ttyS0, 19200, timeout=1)
# -- per provare...

except:

stdscr.addstr(3, 20, 'Porta Seriale Non Disponibile')
stdscr.refresh()
time.sleep(3)
chiudi()

return conn

def ciclo(conn):

# Definizione file temporaneo

fou = open(/home/Dati.txt, w)

a = 0

while 1:

# rfd = input ready
# wft = output reeady
# efd = exception ready

rfd, wft, efd = select.select([sys.stdin, conn], [], [], 0)

# Controllo la disponibilità di dati sulla seriale

if conn in rfd:

dati = conn.read(256)

# Elimino quello che non mi serve.

dati = dati.replace('*', '')
dati = dati.replace('SAMPLE --- PRESSURE --- FLOW ---
PERMEABILITY', '')
dati = dati.replace('2 SQUARE CM CLAMP', '')
dati = dati.replace('PPM100 V2.1 FIAL', '')
dati = dati.strip()

# Stringa vuota: continuo

if dati == '':
continue

# Visualizzo quanto ricevuto dalla seriale

stdscr.addstr(9, 5, dati)
stdscr.refresh()

# Scrivo i dati sul file temporaneo

fou.write(dati + \n)

# Controllo la pressione del tasto 'Q' sulla tastiera.

if sys.stdin in rfd:
cmd = sys.stdin.read(1)

# Se premuto scrivo il file ed esco.

if cmd.strip().lower() == q:

# Chiudo il file temporaneo

fou.close()

xlsout=xlwt.Workbook(encoding='latin-1')
foglio1=xlsout.add_sheet('Foglio1')

foglio1.write(0,0, 'Lettura')
foglio1.write(0,1, 'Pressione')
foglio1.write(0,2, 'Flusso')
foglio1.write(0,3, Permeabilita')

riga = 2

fin = open(/home/Dati.txt, r)
lines = fin.readlines()
fin.close()

for line in lines:

riga += 1

sample = line[0:5].strip()
pressure = line[5:18].strip()
flow = line[18:27].strip()
permeability = line[27:].strip()

foglio1.write(riga, 1, sample)
foglio1.write(riga, 2, pressure)
foglio1.write(riga, 3, flow)
foglio1.write(riga, 4, permeability)

xlsout.save('/home/dati.xls')

chiudi()

def chiudi():

curses.echo()
curses.nocbreak()
curses.curs_set(1)
curses.endwin()
sys.exit(0)

stdscr = aprischermo()
conn = connessione(stdscr)
ciclo(conn)


Ma la domanda è:

Se lo porto su windows cosa devo cambiare?

Grazie!

-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-05 Per discussione Riccardo Brazzale
Il giorno 05 novembre 2013 13:50, Manlio Perillo
manlio.peri...@gmail.comha scritto:


Questa variabile `a` sarei proprio curioso di capire che senso ha...


Nessuno, serviva a me per fare i test, l'ho tolta.



  [...]


   xlsout=xlwt.Workbook(encoding='latin-1')
  [...]

  xlsout.save('/home/dati.xls')


 Questa parte di scrittura del file Excel andrebbe bene in una funzione
 separata.

  [...]


 Ma la domanda è:

 Se lo porto su windows cosa devo cambiare?


 Quasi tutto!

 Le curses non sono disponibili su Windows.
 O meglio, è disponibile una versione alternativa chiamata pdcurses ma il
 modulo standard curses non la supporta, purtroppo.

 Però da una veloce ricerca ho trovato questo:
 https://github.com/jmcb/python-pdcurses


 Altro problema è che su Windows select funziona *solo* con i sockets.
 Per la seriale devi usare il supporto Windows per l'I/O asincrono.
 Peccato però che la console **non** supporti l'I/O asincrono; quindi è un
 vicolo cieco.

 L'alternativa è usare i threads (che li hanno inventati apposta per
 sistemi stupidi come Windows).


Azz!
Come faccio?
Chiedo se possono mettere una macchinetta (anche vecchia) con linux e
buonanotte.

Scusa la mia ignoranza, ma se scrivo in grafica usando per esempio tkinter,
il gestore eventi mi potrebbe aiutare?

Grazie!

-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-05 Per discussione Riccardo Brazzale
Il giorno 05 novembre 2013 14:38, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 Con impegno si può scrivere una versione portabile.  Ho scritto che la
 console in Windows non supporta l'I/O asincrono, ma supporta il polling
 tramite WaitForMultipleObjects.


  Chiedo se possono mettere una macchinetta (anche vecchia) con linux e
 buonanotte.


 Sicuramente è la soluzione migliore.


  Scusa la mia ignoranza, ma se scrivo in grafica usando per esempio
 tkinter, il gestore eventi mi potrebbe aiutare?


 No.

 Puoi provare ad usare le Qt; come ti hanno detto, hanno già il supporto
 per la seriale.
 Non so se supportano la console di Windows, ma puoi fare sempre il polling
 a mano usando un timer.  Non è banale ma nemmeno troppo complesso.

 Di nuovo, una veloce ricerca ha trovato questo:
 http://stackoverflow.com/questions/9741259/reading-
 asynchronously-from-stdin-with-qt

 ... Direi di andare con i threads.  Avvia un thread che legge
 continuamente dallo stdin, e quando l'utente preme il tasto q manda un
 evento al thread principale.


Ho dato un'occhio, credo che tutto cio' che consigliate sia fuori dalla mia
portata.
Insisto con linux su un pc.

Grazie infinite.



-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
Ciao,

Ho questo problema:
Devo realizzare un programma che legge dati da una vecchissima seriale.
Poi devo formattare quello che arriva e metterlo su un foglio xls.

Mi sfugge però una cosa: siccome non posso sapere quando finiscono i dati
in arrivo sulla seriale ( un operatore spinge un tasto che provoca la
trasmissione di una stringa, ma non c'e' un pulsante 'ho finito') come
posso interrompere in ciclo di lettura in maniera 'elegante'?
Posso intercettare la pressione di un dato tasto dalla tastiera senza
utilizzare raw_input che bloccherebbe l'esecuzione?

In sostanza dovrei:

Apro la seriale e mi metto in ascolto con un ciclo infinito.
Se arrivano dati li scrivo su un file temporaneo.
Se l'utente preme il tasto 'Q' (quit):
  Chiudo la seriale
  Leggo il file temporaneo, lo formatto e lo metto su xls.
  Cancello il file temporaneo.

Chiudo il programma.

Qualche idea?

Grazie!

-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
 Ho questo problema:
 Devo realizzare un programma che legge dati da una vecchissima seriale.


Per seriale intendi il vecchio RS-232 ?

Si 232 che scrive direttamente sulla seriale di una stampante ad aghi che
vogliono eliminare.

Poi devo formattare quello che arriva e metterlo su un foglio xls.

 Mi sfugge però una cosa: siccome non posso sapere quando finiscono i
 dati in arrivo sulla seriale ( un operatore spinge un tasto che provoca
 la trasmissione di una stringa, ma non c'e' un pulsante 'ho finito')


Che programma usa, ed in quale sistema operativo?

E' un macchinario che mette i dati su una seriale, è del 1987, non credo
sia dotato di sistema operativo, visualizza i dati su un display
(l'operatore se li copia a mano su un foglio di carta) e li mette a
disposizione su due seriali che in teoria possono pilotare direttamente
un terminale ( forse vt100) o una stampante con porta seriale.

Come funziona questo programma?

Non c'e' un programma.

Mi sembra strano che non si sia modo di dire che l'I/O è terminato.

L'utente schiaccia un pulsate per fare una lettura che viene visualizzata
sul display (centinaia durante la giornata) poi alla sera spegne la
macchina con l'interruttore, non c'e' una
procedura di spegnimento.


come posso interrompere in ciclo di lettura in maniera 'elegante'?
 Posso intercettare la pressione di un dato tasto dalla tastiera senza
 utilizzare raw_input che bloccherebbe l'esecuzione?


Dovresti usare qualcosa di specifico per dialogare con la seriale, come
pyserial, oppure se il programma deve girare solo su sistemi UNIX,
direttamente termios.

Sto gia facendo con pyserial ma il problema è proprio come interrompere il
flusso, ho provato anche curses ma senza risultati:
L'attesa della pressione di un tasto sulla tastiera del pc 'blocca'
l'esecuzione del programma in ascolto sulla seriale.


In sostanza dovrei:

 Apro la seriale e mi metto in ascolto con un ciclo infinito.
 Se arrivano dati li scrivo su un file temporaneo.
 Se l'utente preme il tasto 'Q' (quit):


L'utente non può premere Ctrl-D, per dire che la scrittura è terminata?

Non esiste.

In questo modo, non devi preoccuparti di tutti questi dettagli, perchè il
programma manderà il carattere speciale EOF al terminale.

In questo caso ti basta un semplice read, che bloccherà fino a quando non
viene ricevuto EOF


Grazie.



Il giorno 04 novembre 2013 11:22, computer service cserv...@simail.it ha
scritto:


 usare i timeout che so dopo 5 secondi di silenzio sulla seriale
 considerare chiusa la
 trasmissione, fare le elaborazioni del caso. quindi riaprire la
 comunicazione.
 e via così.
 Saluti
 Gilberto
 On 4 Nov 2013 at 10:20, Riccardo Brazzale wrote:

  Ciao,
 
  Ho questo problema:
  Devo realizzare un programma che legge dati da una vecchissima seriale.
  Poi devo formattare quello che arriva e metterlo su un foglio xls.
 
  Mi sfugge però una cosa: siccome non posso sapere quando finiscono i dati
  in arrivo sulla seriale ( un operatore spinge un tasto che provoca la
  trasmissione di una stringa, ma non c'e' un pulsante 'ho finito') come
  posso interrompere in ciclo di lettura in maniera 'elegante'?
  Posso intercettare la pressione di un dato tasto dalla tastiera senza
  utilizzare raw_input che bloccherebbe l'esecuzione?
 
  In sostanza dovrei:
 
  Apro la seriale e mi metto in ascolto con un ciclo infinito.
  Se arrivano dati li scrivo su un file temporaneo.
  Se l'utente preme il tasto 'Q' (quit):
Chiudo la seriale
Leggo il file temporaneo, lo formatto e lo metto su xls.
Cancello il file temporaneo.
 
  Chiudo il programma.
 
  Qualche idea?
 
  Grazie!
 
  --
  Riccardo Brazzale
  Linux User #299418 Linux Machine #184578
 





 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
Il giorno 04 novembre 2013 12:32, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 On 04/11/2013 11:42, Riccardo Brazzale wrote:

 [...]


  Che programma usa, ed in quale sistema operativo?


 E' un macchinario che mette i dati su una seriale, è del 1987, non credo
 sia dotato di sistema operativo, visualizza i dati su un display
 (l'operatore se li copia a mano su un foglio di carta) e li mette a
 disposizione su due seriali che in teoria possono pilotare direttamente
 un terminale ( forse vt100) o una stampante con porta seriale.


 Probabilmente mi sfugge qualche dettaglio, ma perchè l'operatore deve
 copiarli a mano leggendoli dal display?
 Se il macchinario manda i dati su una seriale, non puoi leggere
 direttamente da li?

 La confusione aumenta.
 Quindi c'è anche un terminale di un PC moderno operato da un utente?

  [...]


Hai ragione,
vediamo di ricapitolare:
c'e' una macchina dotata di un pulsante, un display e una porta seriale.
L'operatore deve fare delle misurazioni (in questo caso deve determinare,
attraverso lo strumento di cui è dotata questa macchina
le caratteristiche di un foglio di carta: porosità e spessore).Quando ha
posizionato il foglio, schiaccia questo pulsante e la macchina
mostra sul display i risultati.
Contemporaneamente mette gli stessi risultati a disposizione sulla seriale.
Ora, non essendoci niente collegato alla seriale, l'operatore trascrive i
dati su un foglio e poi provvede a caricarli su un foglio xls.

Io ho proposto di mettere un PC con un programma python che via seriale
legge i dati a disposizione sulla seriale e compila in automatico il foglio
xls.
Ed è qui la gabola:
visto che io non posso far altro che andare continuamente a interrogare la
seriale per vedere se ci sono dati,
a questo punto con programma python dentro a un infinito ciclo di lettura,
e che sta mostrando sullo schermo del pc i dati letti,
dovrei poter premere questo ipotetico 'q' sulla tastiera del pc in modo da
interrompere il loop e scrivere i dati che ho raccolto dalle n letture sul
foglio xls.
Ma il fatto di intercettare i tasti, blocca il loop e questo non deve
succedere in quanto l'operatore legge un dato adesso, uno fra cinque
minuti,
uno dopo trenta secondi e via via in intervalli di tempo casuale.

Spero di essermi chiarito.

Grazie comunque!



-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
Il giorno 04 novembre 2013 14:40, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 On 04/11/2013 14:13, Riccardo Brazzale wrote:

 [...]

 Hai ragione,
 vediamo di ricapitolare:
 c'e' una macchina dotata di un pulsante, un display e una porta seriale.
 L'operatore deve fare delle misurazioni (in questo caso deve
 determinare, attraverso lo strumento di cui è dotata questa macchina
 le caratteristiche di un foglio di carta: porosità e spessore).Quando ha
 posizionato il foglio, schiaccia questo pulsante e la macchina
 mostra sul display i risultati.
 Contemporaneamente mette gli stessi risultati a disposizione sulla
 seriale.
 Ora, non essendoci niente collegato alla seriale, l'operatore trascrive
 i dati su un foglio e poi provvede a caricarli su un foglio xls.


 Ok.


  Io ho proposto di mettere un PC con un programma python che via seriale
 legge i dati a disposizione sulla seriale e compila in automatico il
 foglio xls.
 Ed è qui la gabola:
 visto che io non posso far altro che andare continuamente a interrogare
 la seriale per vedere se ci sono dati,
 a questo punto con programma python dentro a un infinito ciclo di
 lettura, e che sta mostrando sullo schermo del pc i dati letti,
 dovrei poter premere questo ipotetico 'q' sulla tastiera del pc in modo
 da interrompere il loop e scrivere i dati che ho raccolto dalle n
 letture sul foglio xls.


 Ok.
 Quindi l'operatore può voler ottenere il foglio xls in qualsiasi momento e
 più volte nel corso di una giornata.

 La soluzione allora è abbastanza semplice.

 Devi usare select, passando come files sia il descrittore associato alla
 porta seriale, sia quello associato al terminale interattivo.

 Quando uno dei due è pronto, leggi e gestisci i dati.
 Se è pronto stdin, leggi e se la stringa è q\n, generi il file xls.
 Se è pronto /dev/ttySn, leggi a accumuli i dati in un buffer.

 Se non sai come usare select, chiedi pure.


Un aiuto non guasterebbe!
Grazie.





 Ciao  Manlio

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
Il giorno 04 novembre 2013 14:40, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 On 04/11/2013 14:13, Riccardo Brazzale wrote:

 [...]

 Hai ragione,
 vediamo di ricapitolare:
 c'e' una macchina dotata di un pulsante, un display e una porta seriale.
 L'operatore deve fare delle misurazioni (in questo caso deve
 determinare, attraverso lo strumento di cui è dotata questa macchina
 le caratteristiche di un foglio di carta: porosità e spessore).Quando ha
 posizionato il foglio, schiaccia questo pulsante e la macchina
 mostra sul display i risultati.
 Contemporaneamente mette gli stessi risultati a disposizione sulla
 seriale.
 Ora, non essendoci niente collegato alla seriale, l'operatore trascrive
 i dati su un foglio e poi provvede a caricarli su un foglio xls.


 Ok.


  Io ho proposto di mettere un PC con un programma python che via seriale
 legge i dati a disposizione sulla seriale e compila in automatico il
 foglio xls.
 Ed è qui la gabola:
 visto che io non posso far altro che andare continuamente a interrogare
 la seriale per vedere se ci sono dati,
 a questo punto con programma python dentro a un infinito ciclo di
 lettura, e che sta mostrando sullo schermo del pc i dati letti,
 dovrei poter premere questo ipotetico 'q' sulla tastiera del pc in modo
 da interrompere il loop e scrivere i dati che ho raccolto dalle n
 letture sul foglio xls.


 Ok.
 Quindi l'operatore può voler ottenere il foglio xls in qualsiasi momento e
 più volte nel corso di una giornata.

 La soluzione allora è abbastanza semplice.

 Devi usare select, passando come files sia il descrittore associato alla
 porta seriale, sia quello associato al terminale interattivo.

 Quando uno dei due è pronto, leggi e gestisci i dati.
 Se è pronto stdin, leggi e se la stringa è q\n, generi il file xls.
 Se è pronto /dev/ttySn, leggi a accumuli i dati in un buffer.

 Se non sai come usare select, chiedi pure.



 Ciao  Manlio

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python



Allego il sorgente:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import curses
import time
import serial
import xlwt
import sys

stdscr = curses.initscr()
curses.noecho()

stdscr.addstr(1, 5, 'Ricezione Dati Filtrona')
stdscr.addstr(3, 5, 'Dati Ricevuti:', curses.A_REVERSE | curses.A_BOLD)
stdscr.refresh()

# Definizione comunicazione con porta seriale

conn = serial.Serial(/dev/ttyUSB0, 9600, 8, N, 1, timeout=1)

# Definizione file temporaneo

fou = open(/home/Scrivania/Dati.txt, w)

while 1:

dati = conn.read(64)
stdscr.addstr(3, 20, dati)
stdscr.refresh()
fou.write(dati + \n)

stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE)
stdscr.refresh()
tasto_premuto = stdscr.getch() == qui si blocca e attende e non va
all'else

if tasto_premuto == ord('q') or tasto_premuto == ord('Q'):

# Chiudo il file temporaneo

fou.close()

xlsout=xlwt.Workbook(encoding='latin-1')
foglio1=xlsout.add_sheet('Foglio1')

fin = open(/home/Scrivania/Dati.txt, r)
lines = fin.readlines()
fin.close()

riga = 0

for line in lines:

riga += 1

foglio1.write(riga, 0, line.strip())

xlsout.save('/home/Scrivania/dati.xls')

#chiudo
curses.echo()
curses.nocbreak()
curses.curs_set(1)
curses.endwin()
sys.exit(0)

else:
a = 0
stdscr.addstr(8, 5, '  ')
stdscr.refresh()
continue


-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] [python] Help Lettura da Seriale

2013-11-04 Per discussione Riccardo Brazzale
Il giorno 04 novembre 2013 16:11, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 On 04/11/2013 15:43, Riccardo Brazzale wrote:

 [...]
 Hai ragione,
 vediamo di ricapitolare:
 c'e' una macchina dotata di un pulsante, un display e una porta
 seriale.
 L'operatore deve fare delle misurazioni (in questo caso deve
 determinare, attraverso lo strumento di cui è dotata questa
 macchina
 le caratteristiche di un foglio di carta: porosità e
 spessore).Quando ha
 posizionato il foglio, schiaccia questo pulsante e la macchina
 mostra sul display i risultati.
 Contemporaneamente mette gli stessi risultati a disposizione
 sulla seriale.
 Ora, non essendoci niente collegato alla seriale, l'operatore
 trascrive
 i dati su un foglio e poi provvede a caricarli su un foglio xls.
 [...]
 Allego il sorgente:


 Ti consiglio di organizzare il codice usando delle funzioni; altrimenti
 così non è molto leggibile.

  #!/usr/bin/python
 # -*- coding: utf-8 -*-
 [...]

 while 1:

  dati = conn.read(64)
  stdscr.addstr(3, 20, dati)
  stdscr.refresh()
  fou.write(dati + \n)


 Come è il formato dei dati?


   stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE)


 Ok, allora premendo Q deve uscire e non semplicemente generare il file xls.

 Curiosità: che succede se spegni l'apparecchio mentre questo programma è
 in esecuzione?  Si blocca indefinitamente su conn.read(64) ?



   stdscr.refresh()
  tasto_premuto = stdscr.getch() == qui si blocca e attende e non va
 all'else

  if tasto_premuto == ord('q') or tasto_premuto == ord('Q'):

  # Chiudo il file temporaneo

  fou.close()


 Il codice seguente è un ottimo candidato ad essere spostato in una
 funzione, a cui passi il nome del file con i dati.

  [...]


  #chiudo
  curses.echo()
  curses.nocbreak()
  curses.curs_set(1)
  curses.endwin()
  sys.exit(0)


 basta anche un semplice break.
 Anzi è meglio, così puoi spostare il codice di inizializzazione e
 terminazione delle curses fuori dal ciclo while (meglio se in funzioni
 separate).


  else:
  a = 0


 La variabile `a` a cosa serve?


   stdscr.addstr(8, 5, '  ')
  stdscr.refresh()
  continue


 Comunque il codice lo puoi riscrivere in questo modo, tralasciando la
 gestione degli errori:

 import sys
 import select


 # ... open serial port, init curses
 while 1:
rfd, wfd, efd = select.select([stdin, conn], [], [], 0)
if conn in rfd:
 dati = conn.read(64)
 # ... aggiorna schermo e file dati
if stdin in rfd:
 cmd = stdin.read()
 if cmd.strip().lower() == q:
 # ... salva il file excel
 break
 # close serial port, close curser



 Ciao  Manlio
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python


Gentilissimo.
Faccio delle prove.

Grazie!


-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Conoscere a priori quanti elementi ci sono in un oggetto iterabile.

2013-07-17 Per discussione Riccardo Brazzale
Ciao a tutti,

Esempio:
Faccio una sql su un dbase e carico tutti i record con un cursor.fetchall()

Posso sapere quanti sono i record al volo senza fare un ciclo for per
contarli?

Grazie

--
Riccardo Brazzale

Linux User #299418
Linux Machine #1166215

-- 


--
ARROWELD ITALIA SPA - C.F., P.IVA e Iscrizione al Registro Imprese di 
Vicenza n. 03354110243 - R.E.A. VI/318614 - Cap. soc. 6.500.000,00 € i. v. 
- Sede leg. e amm.: Via Monte Pasubio, 137 - 36010 Zanè (VI) Italia - T. 
+39 0445 80 - F. +39 0445 804400 - email: arrow...@arroweld.com - web: 
www.arroweld.com
--
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Files .pth

2013-07-08 Per discussione Riccardo Brazzale
Ciao a tutti,
sono nuovo anche se vi leggo da un po' e da un po' cerco di produrre
qualcosa con python.

Ho creato una serie di moduli che leggono dati da un db, fanno delle
elaborazioni e scrivono il risultato su un altro db.

Ora vorrei automatizzare il lancio degli script mettendo nella cron della
macchina linux dove gireranno gli script.

Siccome i moduli stanno in una cartella all'interno di /opt non ho fatto
altro che creare un file miacartella.pth che ho messo in
/usr/local/lib/python2.6/site-package


Se lancio uno script con python /opt/miacartella/nomescript.py funziona.
La cron invece va in errore: (CRON) error (grandchild #6971 failed with
exit status 2)

Qualcuno mi può aiutare?

Grazie!

--
Riccardo Brazzale

Linux User #299418
Linux Machine #1166215

-- 


--
ARROWELD ITALIA SPA - C.F., P.IVA e Iscrizione al Registro Imprese di 
Vicenza n. 03354110243 - R.E.A. VI/318614 - Cap. soc. 6.500.000,00 € i. v. 
- Sede leg. e amm.: Via Monte Pasubio, 137 - 36010 Zanè (VI) Italia - T. 
+39 0445 80 - F. +39 0445 804400 - email: arrow...@arroweld.com - web: 
www.arroweld.com
--
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Files .pth

2013-07-08 Per discussione Riccardo Brazzale
debian.
Grazie!

--
Riccardo Brazzale

Linux User #299418
Linux Machine #1166215


Il giorno 08 luglio 2013 15:09, a.cava...@cavallinux.eu ha scritto:

 Che sistema usi (debian/redhat/altro)?
 L'exit status 2 non dice proprio molto sull'origine dell'errore: potrebbe
 essere che nomescript.py non e' eseguibile.




 On 2013-07-08 15:00, Riccardo Brazzale wrote:

 Ciao a tutti,
 sono nuovo anche se vi leggo da un po e da un po cerco di produrre
 qualcosa con python.

 Ho creato una serie di moduli che leggono dati da un db, fanno delle
 elaborazioni e scrivono il risultato su un altro db.

 Ora vorrei automatizzare il lancio degli script mettendo nella cron
 della macchina linux dove gireranno gli script.

 Siccome i moduli stanno in una cartella allinterno di /opt non ho

 fatto altro che creare un file miacartella.pth che ho messo in
 /usr/local/lib/python2.6/site-**package

 Se lancio uno script con python /opt/miacartella/nomescript.py
 funziona.

 La cron invece va in errore: (CRON) error (grandchild #6971 failed
 with exit status 2)

 Qualcuno mi può aiutare?

 Grazie!

 --
 Riccardo Brazzale

  Linux User #299418
 Linux Machine #1166215

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python


-- 


--
ARROWELD ITALIA SPA - C.F., P.IVA e Iscrizione al Registro Imprese di 
Vicenza n. 03354110243 - R.E.A. VI/318614 - Cap. soc. 6.500.000,00 € i. v. 
- Sede leg. e amm.: Via Monte Pasubio, 137 - 36010 Zanè (VI) Italia - T. 
+39 0445 80 - F. +39 0445 804400 - email: arrow...@arroweld.com - web: 
www.arroweld.com
--
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Files .pth

2013-07-08 Per discussione Riccardo Brazzale
Funziona!
Grazie mille.

--
Riccardo Brazzale

Linux User #299418
Linux Machine #1166215


Il giorno 08 luglio 2013 15:33, a.cava...@cavallinux.eu ha scritto:

 prova nel crontab con qualcosa del tipo:

   PYTHONPATH=/opt/mylib python /opt/script.py





 On 2013-07-08 15:21, Riccardo Brazzale wrote:

 debian.
 Grazie!

 --
 Riccardo Brazzale

 Linux User #299418
  Linux Machine #1166215

 Il giorno 08 luglio 2013 15:09, a.cava...@cavallinux.eu [3] ha
 scritto:

  Che sistema usi (debian/redhat/altro)?
 Lexit status 2 non dice proprio molto sullorigine dellerrore:
 po


 __**_
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python


-- 


--
ARROWELD ITALIA SPA - C.F., P.IVA e Iscrizione al Registro Imprese di 
Vicenza n. 03354110243 - R.E.A. VI/318614 - Cap. soc. 6.500.000,00 € i. v. 
- Sede leg. e amm.: Via Monte Pasubio, 137 - 36010 Zanè (VI) Italia - T. 
+39 0445 80 - F. +39 0445 804400 - email: arrow...@arroweld.com - web: 
www.arroweld.com
--
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python