Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-02-2011, 12:33   #1
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
[Python] Eseguire una funzione passata come parametro

Ciao a tutti,
vorrei sapere se è possibile eseguire una funzione passata come parametro.
Mi spiego meglio.
Chiamiamo A il "main" e ipotizziamo che tra i parametri da riga di comando ci sia il nome di una funzione da chiamare (ad es B) definita in un altro file.py.
Se il nome della funzione è il primo argomento argv[1], servirebbe qualcosa del tipo
chiama(argv[1])
E' possibile?
Grazie,
Xwang

PS spero che sia chiaro cosa mi servirebbe
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2011, 13:14   #2
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Forse ho risolto usando il modulo runpy.run_module.
Va bene o ci ono alternative migliori?
Grazie,
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2011, 13:27   #3
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
sì, scrivo di getto senza provare però, quindi potrebbe esserci qualche errore ma l'idea è quella.

Codice:
lista_comandi = [e.lstrip('-') for e in sys.argv[1:]]
for comando in lista_comandi:
    eval(comando)()
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2011, 14:51   #4
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Con runpy funziona, ma non sono riuscito a condividere variabili globali tra le due funzioni (forse perchè ho solo qualche ora di esperienza con python...).
In serata proverò anche con eval, magari semplifica i problemi con le global.
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2011, 15:22   #5
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
anche se non ti ho detto che l'utilizzo di eval è sconsigliato, dà non poche rogne dal punto di vista di manutenibilità del codice e altro.. puoi risolvere così:

Codice:
lista_comandi = [e.lstrip('-') for e in sys.argv[1:]]
for comando in lista_comandi:
    getattr(nomemodulo, comando, altrafunz_se_comando_nonsitrova)()
se invece 'comando' fa parte del modulo corrente o risolvi con sys.modules(__name__) al posto di nomemodulo o con globals().get(comando, altrafunz_se_comando_nonsitrova)
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum

Ultima modifica di cdere : 13-02-2011 alle 18:22.
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2011, 06:32   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Codice:
def g():
  print 'g!'

def f():
  print 'f'!

Dispatcher = {'f' : f, 'g' : g}

MiaFunzione = 'f'

Dispatcher[MiaFunzione]()
Oppure (ma più "oscura"):
Codice:
def g():
  print 'g!'

def f():
  print 'f'!

MiaFunzione = 'f'

globals()[MiaFunzione]()
__________________
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 19-02-2011, 10:46   #7
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Ho risolto così:

module=__import__(moduleName)

importando il modulo e poi chiamando le singole funzioni del modulo importato (che saranno sempre le stesse al varaiare dei moduli).
Che ne pensate?
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 22:53   #8
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Un'altra domanda. Meglio pyton 2.6.5 o 3.1.2? Ubuntu me li rende disponibili tutti e due, ma adesso è installata la 2.6.5.
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 22:59   #9
cdere
Senior Member
 
L'Avatar di cdere
 
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
ad oggi, se devi imparare qualcosa e non hai vincoli di sorta (librerie particolari che non vanno ancora con python 3, vedi django o twisted) vai con python 3.
Che poi non capisco come ubuntu sia ferma al 2.6.x visto che l'ultima release stabile di ramo 2.x è la 2.7...
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum
cdere è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2011, 23:04   #10
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Quote:
Originariamente inviato da cdere Guarda i messaggi
ad oggi, se devi imparare qualcosa e non hai vincoli di sorta (librerie particolari che non vanno ancora con python 3, vedi django o twisted) vai con python 3.
Che poi non capisco come ubuntu sia ferma al 2.6.x visto che l'ultima release stabile di ramo 2.x è la 2.7...
Beh io sto usando la 10.04 che aggiornerò alla prossima LTS che dovrebbe essere la 11.10 (mi sono stufato di aggiornare ogni 6 mesi).
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2011, 21:32   #11
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da xwang Guarda i messaggi
Ho risolto così:

module=__import__(moduleName)

importando il modulo e poi chiamando le singole funzioni del modulo importato (che saranno sempre le stesse al varaiare dei moduli).
Che ne pensate?
Xwang
Che è molto pulita come soluzione.

Riguardo alle versioni di Python, concordo con cdere.
__________________
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 22-02-2011, 23:27   #12
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Grazie ad entrambi per l'aiuto.
Mi sto appassionando sempre più a python e sto sperimentando un po' anche con shedskin nel caso mi servisse più velocità.
Ovviamente non mancherò di "rompervi" con altre domande :-)
Per la versione rimarrò su questa 2.6.5
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2011, 00:08   #13
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Eccomi qui.
Adesso le cose si fanno difficili.
Il programma A chiama all'interno di un ciclo infinito la funzione B.
E questo va bene.
Però avrei bisogno di usare un joystick e di inviare/ricevere pacchetti udp.
Per il joystick serve con pygame un ciclo infinito che rimanga in ascolto di eventi dal joystick e per la ricezione dei pacchetti UDP penso serva la stessa cosa.
Come faccio?
Temo di aver bisogno di usare dei thred specifici per i due listener del joystick e dei pacchetti UDP.
Sbaglio?
Grazie,
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2011, 12:58   #14
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Penso sia la strada corretta.
__________________
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 24-02-2011, 21:37   #15
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Penso sia la strada corretta.
Mi puoi consigliare esempi o dove trovare documentazione al riguardo?
Grazie,
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 13:07   #16
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Per i thread?
__________________
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 25-02-2011, 18:12   #17
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Per i thread?
Si.
Anche perchè sinceramente gli esempi che ho visto svolgono tutti dei cicli while infiniti e non capisco come non facciano ad occupare la cpu al 100% senza fare niente.
Inoltre non ho capito come passare dati dal mio programma ai thread e viceversa.
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 19:02   #18
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Codice:
import Queue, threading, time

class CustomThread(threading.Thread):

  def run(self):

    while True:
      Job = Jobs.get()
      print 'Ho ricevuto il seguente lavoro:', Job
      Results.put(Job)

Jobs = Queue.Queue()
Results = Queue.Queue()

MyThread = CustomThread()
MyThread.start()

Jobs.put('Uno!')
time.sleep(1)
Jobs.put('Due!')
time.sleep(1)
Jobs.put('Tre!')

while len(Results):
  print 'Ho ricevuto:', Results.get()
__________________
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 25-02-2011, 20:58   #19
xwang
Senior Member
 
L'Avatar di xwang
 
Iscritto dal: Oct 2003
Messaggi: 2987
Grazie,
adesso ci lavorerò per le comunicazioni udp.
Nel frattempo ho risolto il problema del joystick usando pygame, inizializzando il joystick e con una funzione che ad ogni chiamata processa tutti gli eventi in coda non ancora analizzati.
Fino ad uin rateo di 200 hz non ho problemi quindi posso fare a meno per il joystick (e per ciò che voglio fare) di un thread apposito.
Xwang
__________________
ASUS N752VX Arch AMD64 + KDE
xwang è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
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 ...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
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: 18:39.


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