Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
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


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
CISA conferma: il bug di Windows Defende...
Hyper Mini LED e 5K: LG UltraGear evo AI...
Il falso bug di Windows 3.1 che costò a ...
GTA 6 ha già conquistato gli uten...
L'UE ha un grosso problema: la sua ident...
I 10 articoli TOP Amazon per l'estate: t...
Lumo 2.0: Proton sfida ChatGPT e Claude ...
OnePlus lancia il suo entry level N6: ba...
Google spegne l'API di Tenor: GIF a risc...
Dreame Aqua10 Ultra Roller Complete e Aq...
Dreame L50s Pro Ultra vs ECOVACS T90 PRO...
USA e Cina si combattono su tutto, trann...
UE, entra in vigore il nuovo dazio sui p...
Piccolo fuori, enorme dentro: il nuovo C...
Nothing Phone (4b) si mostra online a un...
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: 11:30.


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