Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
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 [email protected]
##
## 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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Oppo Find X10, X10 Pro Max e X10 E: conf...
Dal microscopio all'IA: un cervello di i...
Cyberpunk 2077 arriverà su Battle...
Altro che divieto: interi pallet di GeFo...
QNAPTS-h966TX, il NAS per chi fa editing...
Il trucco semplicissimo per installare W...
Apple rinvia due novità di iOS 27...
Una memoria ferroelettrica raggiunge 10 ...
Honor Magic 9, Pro Max e Super Edition: ...
24 offerte Amazon da non perdere, dalla ...
Apple starebbe progettando i propri cont...
Niente borsa per OpenAI prima del 2027: ...
Meta potrebbe aver mostrato in anticipo ...
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: 13:35.


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