Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-01-2010, 20:36   #1
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
[Python]*Collegarsi a un programma con interfaccia web

Ciao a tutti, ho la necessità di agganciarmi a un programma python con una interfaccia web accessibile anche da remoto.
In sostanza devo richiedere variabili al programma python e scriverle in una pagina html (o similare) da vedere da remoto.
Poi ho bisogno anche di far eseguire al programma python funzioni richieste via interfaccia web.
Come posso fare?
Grazie
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 02:06   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Intanto è necessario sapere in quale ambiente girerà il tuo programma Python per l'interfaccia web remota: apache (con mod_python), lighttpd, oppure il server HTTP integrato nella libreria standard di Python?

Fatto questo, vedremo poi come fare per il resto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 08:14   #3
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
ho la possibilità di usare sia apache sia il server interno di python (forse meglio la seconda soluzione).
Il programma è già scritto, devo solo stabilire la comunicazione tra pagina web e il programma stesso
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 08:31   #4
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Allora ti consiglio di usare webpy col server interno.

Se guardi gli esempi, è semplicissimo da usare.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 08:46   #5
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Allora ti consiglio di usare webpy col server interno.

Se guardi gli esempi, è semplicissimo da usare.
posto un pò di codice
allora....per esempio (dico subito, il programma su cui devo realizzare l'interfaccia web è il tucan manager per i download)....

Codice:
###############################################################################
## Tucan Project
##
## Copyright (C) 2008-2009 Fran Lupion crak@tucaneando.com
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
###############################################################################

import threading
import time
import curses
import logging
logger = logging.getLogger(__name__)

from no_ui import NoUi
from core.log_stream import LogStream

import core.cons as cons

STATUS_LINES = 1
DOWNLOAD_LINES = 60
LOG_LINES = 50
WIDTH = 100

class Cli(NoUi):
	""""""		
	def __init__(self, *kwargs):
		""""""		
		#set logger
		self.stream = LogStream()
		handler = logging.StreamHandler(self.stream)
		handler.setLevel(logging.INFO)
		handler.setFormatter(logging.Formatter('%(levelname)-7s %(message)s'))
		logging.getLogger("").addHandler(handler)
				
		NoUi.__init__(self, *kwargs)
		self.quit_question = False
		self.win_height = 0
		self.win_chars = 0
		self.last_length = 0
		self.total_speed = 0

	def run(self, screen):
		""""""
		self.screen = screen
		self.screen.nodelay(1)
		try:
			curses.curs_set(0)
		except:
			logger.warning("Could not hide the cursor")

		#set default screen
		self.status_pad = curses.newpad(STATUS_LINES, WIDTH)
		self.main_pad = curses.newpad(DOWNLOAD_LINES, WIDTH)
		self.log_pad = curses.newpad(LOG_LINES, WIDTH)

		#load links file
		th = threading.Thread(group=None, target=self.load_file, name=None)
		th.start()
		
		while True:
			self.win_height, self.win_chars = self.screen.getmaxyx()
			self.parse_input()
			try:
				log_len = self.update_main()
				self.update_log(log_len)
			except curses.error, e:
				logger.warning(e)
			else:
				curses.doupdate()
			time.sleep(0.5)
		
	def parse_input(self):
		""""""
		try:
			input = self.screen.getkey()
		except curses.error:
			if not self.quit_question:
				self.update_status()
		else:
			if self.quit_question:
				if input.lower() == "y":
					self.quit()
				else:
					self.quit_question = False
					self.update_status()
			else:
				if input.lower() == "q":
					self.quit_question = True
					self.question()
				else:
					self.update_status()
					
	def update_main(self):
		""""""
		if self.win_height > 5:
			cont = 0
			self.main_pad.erase()
			self.total_speed = 0
			for download in self.download_manager.complete_downloads + self.download_manager.active_downloads:
				service = "[]"
				for link in download.links:
					if link.active:
						service = "[%s %s]" %(link.plugin_type, link.service)
				self.total_speed += download.speed
				percent = "%i%s" % (int(download.progress), "%")
				speed = "%s KB/s" % download.speed
				size = "%i%s / %i%s" % (download.actual_size, download.actual_size_unit, download.total_size, download.total_size_unit)
				time = str(self.calculate_time(download.time))
				self.main_pad.addnstr(cont, 1, download.name, WIDTH)
				self.main_pad.addnstr(cont+1, 5, "%s %s \t%s \t%s \t%s" % (percent, service, size, speed, time), WIDTH)
				cont +=3
			self.download_manager.update()
			#2 primeras lineas en blanco
			cont +=2
			remain = self.win_height-cont
			start = 0
			while remain <= 5:
					remain += 3
					start += 3
			self.main_pad.noutrefresh(start, 0, 2, 0, cont-start, self.win_chars-1)
			return remain

	def update_log(self, length):
		""""""
		if length:
			lines = self.stream.readnlines(length)
			if lines:
				self.last_length = length
				self.log_pad.erase()
				for i in range(len(lines)):
					self.log_pad.addnstr(i, 0, lines[i], WIDTH, curses.A_DIM)
				self.log_pad.noutrefresh(0, 0, self.win_height-length, 0, self.win_height-1, self.win_chars-1)

	def update_status(self):
		""""""
		active = len(self.download_manager.active_downloads)
		complete = len(self.download_manager.complete_downloads)
		total = len(self.download_manager.pending_downloads + self.download_manager.active_downloads + self.download_manager.complete_downloads)
		self.status_pad.erase()
		self.status_pad.addnstr(0, 0, "Downstream: %s KB/s \tTotal %s \tActive %s \tComplete %s" % (self.total_speed, total, active, complete), WIDTH, curses.A_BOLD)
		self.status_pad.noutrefresh(0, 0, 0, 0, 0, self.win_chars-1)

	def question(self):
		""""""
		self.status_pad.erase()
		self.status_pad.addnstr(0, 0, "Are you sure you want to quit? [y/N]", WIDTH, curses.A_STANDOUT)
		self.status_pad.noutrefresh(0, 0, 0, 0, 0, self.win_chars-1)
		
	def calculate_time(self, time):
		""""""
		result = None
		hours = 0
		minutes = 0
		while time >= cons.HOUR:
			time = time - cons.HOUR
			hours += 1
		while time >= cons.MINUTE:
			time = time - cons.MINUTE
			minutes += 1
		seconds = time
		if hours > 0:
			result = str(hours) + "h" + str(minutes) + "m" + str(seconds) + "s"
		elif minutes > 0:
			result =  str(minutes) + "m" + str(seconds) + "s"
		elif seconds > 0:
			result = str(seconds) + "s"
		return result
Se nella funzione def update_main(self):
Codice:
def update_main(self):
		""""""
		if self.win_height > 5:
			cont = 0
			self.main_pad.erase()
			self.total_speed = 0
			for download in self.download_manager.complete_downloads + self.download_manager.active_downloads:
				service = "[]"
				for link in download.links:
					if link.active:
						service = "[%s %s]" %(link.plugin_type, link.service)
				self.total_speed += download.speed
				percent = "%i%s" % (int(download.progress), "%")
				speed = "%s KB/s" % download.speed
				size = "%i%s / %i%s" % (download.actual_size, download.actual_size_unit, download.total_size, download.total_size_unit)
				time = str(self.calculate_time(download.time))
				self.main_pad.addnstr(cont, 1, download.name, WIDTH)
				self.main_pad.addnstr(cont+1, 5, "%s %s \t%s \t%s \t%s" % (percent, service, size, speed, time), WIDTH)
				cont +=3
			self.download_manager.update()
			#2 primeras lineas en blanco
			cont +=2
			remain = self.win_height-cont
			start = 0
			while remain <= 5:
					remain += 3
					start += 3
			self.main_pad.noutrefresh(start, 0, 2, 0, cont-start, self.win_chars-1)
			return remain
Dovessi ritornare alla pagina web per esempio la variabile speed....

Secondo http://webpy.org/tutorial3.en dovrei fare:

code.py
Codice:
import web
urls = (
  '/', 'index'
)
app = web.application(urls, globals())
web.py
Codice:
class index:
    def GET(self):
        return "speed"
non c'è bisogno di altro? La variabile speed devo passarla però a web.py giusto?
E' la prima volta che programmo in python e mi sto documentando un pò, mi serve lo spunto per fare questa cosa e capire se è realmente possibile perchè se fosse cosi mi addentro nel linguaggio per bene

edit: ho visto solo ora questo http://webpy.org/skeleton/0.3 credo di averci capito un pò di più

Ultima modifica di francesco289 : 26-01-2010 alle 08:48.
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 08:53   #6
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
forse è meglio...
code.py
Codice:
import web
import view

urls = (
    '/', 'index'    )

class index:
    def GET(self):
        return view.speed()

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.internalerror = web.debugerror
    app.run()
view.py
Codice:
import web
import cly
def speed():
 return getspeed()
in cly.py metto
Codice:
def getspeed():
 return speed
magari ho fatto del pocio sono abituato a java e c
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 10:59   #7
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
son riuscito a far andare qualcosa

code.py
Codice:
import web
import view

urls = (
    '/', 'index'    )

class index:
    def GET(self):
        return view.prova()
        
if __name__ == "__main__":
    app = web.application(urls, globals())
    app.internalerror = web.debugerror
    app.run()
view.py
Codice:
import web

def prova():
        return "Hello, world!"
Funziona tutto potrei eventualmente ripulire il codice da qualcosa di troppo?

edit: togliere il import web dal secondo file.... ok questo per vedere le cose...e per dare input via browser?

Ultima modifica di francesco289 : 26-01-2010 alle 11:06.
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 12:16   #8
francesco289
Senior Member
 
L'Avatar di francesco289
 
Iscritto dal: Apr 2009
Città: MN - MI
Messaggi: 2741
ok, ho trovato questo:
code.py
Codice:
import web
import view

urls = (
    '/', 'index'    )

class index:
    def GET(self):
    	user_data=web.input()
    	print user_data.id ## Questo printa a terminale id
    	return view.prova(user_data)
        
if __name__ == "__main__":
    app = web.application(urls, globals())
    app.internalerror = web.debugerror
    app.run()
view.py
Codice:
import web

def prova(user_data):
        return user_data.id ## Questo printa sulla pagina web id
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 13:59   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Scusami, ma stamattina non ho avuto altre tempo per collegarmi al forum.

Però ho visto che hai smanettato e risolto. Bene, bene. Così le cose che hai appreso ti rimarranno più impresse.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Cosa vuol dire "vantaggio quantisti...
Retelit punta sulla connettività ...
Novità WhatsApp: promemoria sui m...
AMD: la prossima generazione di schede v...
MediaWorld potrebbe diventare cinese: Ce...
Amazon in delirio da sconti: 22 articoli...
EOLO ha più di 700 mila utenti in...
Una spin-off del MIT ha creato dei super...
Il radiatore di una BMW M4 per raffredda...
OpenAI accelera su GPT-5: lancio estivo ...
È indietro e deve reagire: il CEO...
Samsung Galaxy Buds3 a 86€, Bose QuietCo...
Addio feed MSN: Microsoft punta tutto su...
GPD Win 5 con il superchip AMD fa volare...
Top 7 Amazon bestseller: classifica scon...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v