Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-01-2010, 21: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, 03: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, 09: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, 09: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, 09: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 09:48.
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 09: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, 11: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 12:06.
francesco289 è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 13: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, 14: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


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Black Friday HONOR, prezzi giù fi...
AliExpress sfida Amazon sui prezzi: e-bi...
Gemini sotto accusa in Ungheria: per l'a...
Windows 11 può girare sulla NPU invece d...
MediaWorld diventa cinese: l'UE dice s&i...
Akamai potenzia il proprio cloud con due...
Steam, Valve cambia le regole: le revisi...
Canva licenzia (anche) per colpa dell'IA...
Axerta: l’IA traina la crescita delle te...
Galaxy A38, la batteria cresce ma il pre...
Notifica su Facebook: 'Effettuerai la mi...
Xbox pronta a dire addio allo studio di ...
Meta stacca la spina: fine del supporto ...
Scambio file senza limiti: Google porta ...
Taiwan sbarca a EICMA 2026: maxi scooter...
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: 20:13.


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