Messaggi: 164
Discussioni: 10
Registrato: Jan 2017
Reputazione:
0
Buonasera. Chiedo scusa se formulo domande banali ma, dopo aver brancolato nel web, non so a chi rivolgermi per chiedere aiuto a risolvere un nuovo problema. Ho redatto un programmino in python che -tra l'altro- registra su un file (grazie ippogrifo) i risultati di alcune misurazioni. Gira regolarmente, nessun intoppo anche dopo diversi cicli. Il problema sorge quando cerco di farlo partire in background. E niente. non va. Suppongo dipenda da priorità di esecuzione o roba del genere ma oltre non vado. Se necessario posso postare il programma ma esso richiede l'installazione di librerie aggiuntive e, forse, la questione è risolvibile con qualche semplice accorgimento. Grazie
Messaggi: 1,218
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
12/11/2019, 17:47
(Questo messaggio è stato modificato l'ultima volta il: 12/11/2019, 17:54 da ippogrifo.)
Prova a porre (se ricordo correttamente) il comando "&" (la e commerciale) dopo il nome del programma/script da eseguire (il comando "&" permette l’esecuzione del processo in background); ad esempio nel caso di impiego di crontab per eseguire un programma in background:
@at reboot python /path_eseguibile/my_prog.py &
Messaggi: 1,218
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
12/11/2019, 20:37
(Questo messaggio è stato modificato l'ultima volta il: 12/11/2019, 20:43 da ippogrifo.)
Strano, non ho mai avuto problemi, anche se erano eseguibili (compilati da C). Ma "smontare il programma ......)?
Prova ad avviare la procedura come superuser (sudo ...).
Messaggi: 164
Discussioni: 10
Registrato: Jan 2017
Reputazione:
0
delimitato il problema.
def scrivifile(nome,contenuto):
file1 = open(nome+".txt","w")
file1.write("\n"+contenuto)
domoticz(report,"eccomi")
sleep(5)
file1.close()
sleep(5)
domoticz(report,"finito")
se lo eseguo lanciando il programma in foreground funziona correttamente. Se lo lancio al reboot i vari segnalibro che mando a domoticz passano regolarmente mentre il file non viene scritto. Anche gli sleep non hanno sortito effetto. Dev'essere un problema di accavallamento di istruzioni.
Messaggi: 1,218
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
Non conosco python e la sua sintassi, ma se il file non viene scritto è probabile che uno dei due parametri della funzione non sia ancora definito. Inserisci delle istruzioni di print, come debug, prima di file1.... per vedere cosa viene passato come nome e contenuto, dopo file1.write rileggi il contenuto di file1 (file1.read) e fallo stampare (print). Chiudi il file prima dell'istruzione domoticz........ , elimina le istruzioni di sleep. Di fatto avrai le due istruzioni di domoticz successive, puoi eliminarne una. Nel caso, a solo scopo di debug, puoi semplificare la funzione, ad esempio assegna all'interno della funzione il nome e passa solo il "contenuto". (Immagino che l 'indentazione dell'applicativo sia corretta)
Messaggi: 164
Discussioni: 10
Registrato: Jan 2017
Reputazione:
0
12/11/2019, 23:21
(Questo messaggio è stato modificato l'ultima volta il: 13/11/2019, 01:14 da Zzed.)
1) Se lancio il programma da consolle funziona correttamente. D'altronde le variabili sono definite all'interno della funzione per cui sono certo che non è un errore di programma o mancanza di dati.
2) Gli sleep li ho inseriti dopo pensando ci fosse un accavallamento di istruzioni. Inutile, manco a dirlo. Ho pure creato un file di lancio che, autoeseguito, provvede a lanciare il programma di scrittura. Niente.
Ho cercato online e non ho trovato nulla. D'altra parte l'anomalia persiste anche se faccio girare il programma su altro raspberry.
Non so che pensare. Mi sarebbe stato utile scrivere i dati direttamente sulla sd per monitorare eventuali bugs. Mah
Messaggi: 1,218
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
12/11/2019, 23:43
(Questo messaggio è stato modificato l'ultima volta il: 12/11/2019, 23:46 da ippogrifo.)
All'interno della funzione non vedo variabili locali, ma solo alcune stringhe. Nella definizione della funzione, gli argomenti della stessa devono essere definiti precedentemente per essere poi passati. Le istruzioni di print, utilizzate come debug, possono in fase di reboot mostrare eventuali "disallineamenti".
Avrai sicuramente reso eseguibile l'applicativo (eventualmente per tutti).