salva214
Posts: 26
Joined: Wed Feb 27, 2013 3:09 pm

Set di variabili condiviso tra programmi! Possibile?

Sat Mar 16, 2013 5:13 pm

ciao a tutti ragazzi....volevo sapere da titolo se è possibile creare un set di variabili condiviso tra piu programmi...mi spiego meglio; il mio intento era quello di creare una serie di programmi, dei quali ognuno svolge una funzione specifica. In fine c'è un programma monitor che altro non è che una gui a codice che legge alcune variabili da questi programmi e ne stampa in contenuto a schermo. ho provato a fare delle prove condividendo tra piu programmi un file di testo a mo' di database, ma mi sembra una cosa troppo macchinosa, e se gia lagga con solo un programma, figuriamoci con piu di uno!
Vi posto quello che ho "compicciato" per provare a farvi capire meglio:

File: prova.py

Code: Select all

# coding= utf-8 

# -* coding: iso-8859-15 -*-
from __future__ import division
from subprocess import PIPE, Popen

#from temp2 import var #<=== si blocca tutto se abilito questa

import temp
import time
import re
import os.path
import os
import sys
import psutil


def get_cpu_temperature():
    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
    output, _error = process.communicate()
    return float(output[output.index('=') + 1:output.rindex("'")])

def cls():
    os.system(['clear','cls'][os.name == 'nt'])
    
cls()
a=0
tempe=0
text=""


while 1:	
	cls()
	print "------------------------------------------------"
	print "|               Prova GUI testuale             |"  
	print "------------------------------------------------"
	print ""
	print " Dati disponibili: "
	print ""
	print ""
	print ""
	print ""
	print "   Variabile auto incrementante: "+str(a)
	print "   Temperatura CPU: " +str (tempe)
	print ""
	print ""
	print "   Temperatura da file: "+text
	print "   altro: "
	print ""
	print ""
	print ""
	print ""
	print ""
	a=a+1
	
	#text = var
	
	# Legge un file.
	in_file = open("test.txt","r")
	text = in_file.read()
	in_file.close()
	tempe=temp.get_cpu_temperature()
	time.sleep(0.05)
File: prova2.py

Code: Select all

# coding= utf-8 

# -* coding: iso-8859-15 -*-
from __future__ import division
from subprocess import PIPE, Popen
import time
import re
import os.path
import os
import sys
import psutil


def get_cpu_temperature():
    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
    output, _error = process.communicate()
    return float(output[output.index('=') + 1:output.rindex("'")])



while 1:
	var=get_cpu_temperature()

	# Scrive un file.
	out_file = open("test.txt","w")
	out_file.write(str(var))
	out_file.close()
	time.sleep(0.1)	
Inoltre vorrei sapere come implementare gli imput da tastiera senza però bloccare il programma in attesa dell'imput, ad esempio, se premo ESC si chiude il programma, se premo A cambia schermata, ecc...
Grazie a tutti!

cil8
Posts: 179
Joined: Tue Feb 14, 2012 10:47 am

Re: Set di variabili condiviso tra programmi! Possibile?

Sat Mar 16, 2013 5:23 pm

le soluzioni sono molteplici, ma l'idea di un database su file condiviso credo che sia buona. La cosa meno buona è usare un file di testo che, come dici tu, rende tutto effettivamente macchinoso.
Sqlite credo che sarebbe perfetto... ma devi conoscere un minimo di sql.

http://docs.python.org/2.7/library/sqli ... le-sqlite3

salva214
Posts: 26
Joined: Wed Feb 27, 2013 3:09 pm

Re: Set di variabili condiviso tra programmi! Possibile?

Sat Mar 16, 2013 7:00 pm

hai ragione! non so perchè non ci avevo pensato prima! e per gestire gli eventi da tastiera?
avevo trovato questo
CURSES:
http://www.python.it/doc/howto/Curses/c ... 0000000000

ma non so se potrebbe fare al caso mio!... :?:


3-4-Fun
Posts: 50
Joined: Sun Dec 23, 2012 3:25 pm

Re: Set di variabili condiviso tra programmi! Possibile?

Mon Mar 18, 2013 11:00 pm

Non conosco il python e perciò non ti posso dare la soluzione.
Di solito però si sviluppano separatamente Front-End (interfaccia utente) e back-end (processi/thread che eseguono funzioni di comunicazione e aggiornamento dati asincroni, nel tuo caso lettura delle temperature).

La comunicazione tra le due entità avviene tramite un mix delle seguenti tecniche:
1. invio di segnali (SIGUSR, ecc)
2. pipe
3. tcp/udp
4. shared memory
5. database

Ad esempio, puoi lanciare uno o più processi che leggono dati in background e aggiornano un database o una shared memory ogni secondo, e un processo di front-end che attende un comando da tastiera, e se non riceve nessun comando entro un secondo, esegua il rinfresco dei dati a video, altrimenti gestisce comando che riceve in input.

Return to “Italiano”