On Mon, 16 Mar 2009 10:53:25 +0100, federica fanzago <federicafanz...@gmail.com> wrote: > Ciao a tutti, > sto scrivendo uno script shell che deve a sua volta chiamare uno > script python passandogli un argomento. > > Tale argomento vorrei venisse interpretato dallo script python come un > dizionario, > ovvero qualcosa del tipo > > test.py {'citta':'roma', 'stato':'italia'} > > dove {'citta':'roma', 'stato':'italia'} e' il dizionario > > se pero' in test.py mi faccio stampare le chiavi > ---- > d=sys.argv[1] > print d.keys() > ----- > mi dice che ho passato una stringa e non un dizionario.... > > come devo fare per passare correttamente come argomento un dizionario > o come devo fare affinche' nello script python la stringa > {'citta':'roma', 'stato':'italia'} venga "trasformata" in dizionario?
Ciao, passare le opzioni ad uno script è un meccanismo standard del sistema operativo, non qualcosa riguardante il Python, quindi tutto quello che viene passato sono stringhe e non c'è un meccanismo diretto per passare un dizionario. Anche se eval(argv[1]) ti trasformerebbe la stringa in dizionario, NON FARLO, perchè è fin troppo facile passare al programma qualcosa di distruttivo. La cosa più semplice è di passare solo le stringhe al programma, dicamo una sequenza chiave, valore, chiave, valore... e interpretare quella: per esempio se invochi lo script con: test.py citta roma stato italia Puoi ottenere il tuo dizionario con: >>> L = sys.argv[1:] >>> print dict(L[i:i+2] for i in range(0,len(L),2)) {'citta': 'roma', 'stato': 'italia'} per esigenze di parsing di command line più complesse, puoi dare un'occhiata al modulo optparse (http://docs.python.org/library/optparse.html). La command line comunque serve per lo più a parsare "opzioni", quindi un elenco "piatto" di variabili. Se due script devono comunicarsi qualcosa di complesso come strutture annidiate considera la possibilità di far comunicare via pipe i due script (esegui "python script1.py | python script2.py", dove script1 scrive su stdout, script2 legge da stdin) e usare un parser generico, come json (http://docs.python.org/library/json.html) o pickle (http://docs.python.org/library/pickle.html) per serializzare e deserializzare gli oggetti. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python