Nota
pywws documentation is now located at http://pywws.readthedocs.org/it/. This copy is no longer being updated and may be out of date.
Come impostare una registrazione ‘live’ con pywws¶
Introduzione¶
Ci sono due abbastanza differenti modalità di funzionamento con pywws. Tradizionalmente con Hourly
viene eseguito a intervalli regolari (di solito un’ora) da cron. Questo è adatto per siti Web abbastanza statici, ma aggiornamenti più frequenti possono essere utili per i siti come Weather Underground (http://www.wunderground.com/). Il più recente programma LiveLog
gira continuamente e può i caricare dati ogni 48 secondi.
Guida introduttiva¶
Prima di tutto, è necessario installare pywws e assicurarsi che si possono ottenere i dati dalla tua stazione meteo. Vedere Come iniziare con pywws per i dettagli.
Esecuzione di prova LiveLog
dalla riga di comando, con un alto livello di verbosità in modo da poter vedere ciò che sta accadendo:
python -m pywws.LiveLog -vvv ~/weather/data
Entro cinque minuti (supponendo di aver impostato un intervallo di registrazione di 5 minuti) si dovrebbe vedere un messaggio ‘live_data new ptr’, seguita dal recupero di eventuali nuovi dati dalla stazione meteo ed elaborarli. Lasciate che LiveLog
funzionare per un minuto o due o più, poi fermare il processo digitando ‘<Ctrl>C’.
Percorsi dei file di configurazione¶
Aprire il file weather.ini con un editor di testo. Si dovrebbe avere una sezione di [paths]
simile al seguente (dove xxx
è il tuo nome utente):
[paths]
work = /tmp/weather
templates = /home/xxx/weather/templates/
graph_templates = /home/xxx/weather/graph_templates/
local_files = /home/xxx/weather/results/
Modificare queste per soddisfare le vostre preferenze di installazione. work
è una directory temporanea utilizzata per archiviare i file intermedi, templates
è la directory per i tuoi file modello di testo e graph_templates
è la directory per i tuoi file grafici di modello e local_files
è una directory dove viene messo l’output del modello che non è stato caricato in un sito web. Non usare le directory di esempio pywws per questi, perchè saranno sovrascritti quando si aggiorna pywws.
Copiare i modelli di testo e grafico nelle directory appropriate. Si possono trovare alcuni esempi forniti con pywws utili per iniziare. Se hai installato pywws con pip
gli esempi dovrebbero essere in /usr/share/pywws
o /usr/local/share/pywws
o simili.
Configurazione dell’esecuzione periodica¶
In weather.ini si dovrebbe avere una sezione [live]
simile alla seguente:
[live]
services = []
plot = []
text = []
Questa sezione specifica cosa pywws dovrebbe fare ogni volta che ottiene una nuova lettura dalla stazione meteo, cioè ogni 48 secondi. La voce services
è un elenco di servizi meteo online dove caricare dati, ad esempio ['underground_rf']
. Le voci plot
e text
sono elenchi di file di modello grafici e file di testo che devono essere elaborati e, opzionalmente, caricati sul tuo sito web. Probabilmente si dovrebbe lasciare tutto questo vuoto tranne che per i servizi services
.
Se si utilizza YoWindow (http://yowindow.com/) si può aggiungere una voce alla sezione [live]
per specificare il file di YoWindow, ad esempio:
[live]
services = ['underground_rf']
text = [('yowindow.xml', 'L')]
...
Si noti l’uso del flag 'L'
– questo dice a pywws si inviare il risultato alla directory “local files” invece di caricarlo sul tuo sito ftp.
Se non li hai già, create quattro altre sezioni nel file weather.ini: [logged]
, [hourly]
, [12 hourly]
e [daily]
. Queste sezioni dovrebbero avere voci simili alla sezione [live]
e specificare cosa fare ogni volta i dati vengono registrati (5-30 minuti, a seconda l’intervallo di registrazione), ogni ora, due volte al giorno e una volta al giorno. Aggiungere i nomi dei file di modello alle voci appropriate, ad esempio:
[logged]
services = ['underground', 'metoffice']
plot = []
text = []
[hourly]
services = []
plot = ['7days.png.xml', '24hrs.png.xml', 'rose_24hrs.png.xml']
text = [('tweet.txt', 'T'), '24hrs.txt', '6hrs.txt', '7days.txt']
[12 hourly]
services = []
plot = []
text = []
[daily]
services = []
plot = ['28days.png.xml']
text = [('forecast.txt', 'T'), 'allmonths.txt']
Si noti l’uso del flag 'T'
– questo dice a pywws si inviare il risultato a Twitter invece di caricarlo sul proprio sito ftp.
Cambiato nella versione 13.06_r1015: Aggiunto il flag 'T'
. Precedentemente i modelli Twitter sono stati indicati separatamente in voci twitter
in [hourly]
e di altre sezioni. La sintassi precedente funziona ancora, ma è obsoleta.
Cambiato nella versione 13.05_r1013: aggiunto il modello 'yowindow.xml'
. Precedentemente il file yowindow era generato da un modulo separato, richiamato dalla voce yowindow
nella sezione [live]
. La sintassi precedente funziona ancora, ma è obsoleta.
Upload asincrono¶
Nuovo nella versione 13.09_r1057.
Il caricamento dei dati in siti web o ‘services’ a volte può richiedere del tempo, in particolare se un sito è andato off line e i tempi di caricamento sono lunghi. In condizioni di normale funzionamento pywws attende che tutti i caricamenti siano elaborati prima di scaricare ulteriori dati dalla stazione meteo. Questo può portare alcune volte a dati di essere mancanti.
L’elemento asynchronous
nella sezione [config]
di weather.ini può essere impostato su True
per dire a LiveLog
per fare questi caricamenti in un processo separato. Questa funzionalità è ancora un po’ sperimentale – provatelo a vostro rischio.
Utilizzare gli script di utilità¶
L’installazione di pywws include un breve script pywws-livelog.py
che viene installato in /usr/bin
o /usr/local/bin
o simili. Si dovrebbe essere in grado di utilizzare questo script per eseguire LiveLog
:
pywws-livelog.py -v ~/weather/data
Esecuzione in background¶
Al fine di avere :py:mod: LiveLog
in esecuzione dopo aver terminato di utilizzare il computer deve essere eseguito come un processo in background. Nella maggior parte dei sistemi Linux/UNIX è possibile farlo mettendo una e commerciale (‘&’) alla fine della riga di comando. Per esempio:
pywws-livelog.py ~/weather/data &
Tuttavia, sarebbe utile sapere cosa è andato storto se il programma si blocca per qualsiasi motivo. Con LiveLog
è possibile memorizzare i messaggi in un file di log specificato con il opzione -l
:
pywws-livelog.py -v -l ~/weather/data/pywws.log ~/weather/data &
Riavvio automatico¶
Ci sono diversi modi per configurare un sistema Linux per avviare un programma quando la macchina si avvia. In genere, questi comportano di mettere un file in /etc/init.d/
, che richiede i privilegi di root. Il problema è leggermente più difficile da garantire se un programma si riavvia quando si blocca. La mia soluzione per entrambi i problemi è quello di eseguire il seguente script da cron, ogni ora.
#!/bin/sh
pidfile=/var/run/pywws.pid
datadir=/data/weather
logfile=$datadir/live_logger.log
# exit if process is running
[ -f $pidfile ] && kill -0 `cat $pidfile` && exit
# email last few lines of the logfile to see why it died
if [ -f $logfile ]; then
log=/var/log/log-weather
tail -40 $logfile >$log
/home/jim/scripts/email-log.sh $log "weather log"
rm $log
fi
# restart process
pywws-livelog.py -v -l $logfile $datadir &
echo $! >$pidfile
Questo memorizza l’id di processo del LiveLog
del pidfile. Se il processo è in esecuzione, lo script non serve a nulla. Se il processo si è bloccato, mi invia un e-mail con le ultime 40 righe del file di log (usando uno script che crea un messaggio e lo passa al sendmail) e poi si riavvia LiveLog
. Avrete bisogno di modificare molto questo per soddisfare le posizioni dei file e così via, ma dà un’idea di cosa fare.
Commenti o domande? Si prega di iscriversi per al mailing list pywws http://groups.google.com/group/pywws e facci sapere.