[Risolto] Python: getopt come funziona?

Mi sto divertendo un po con python (per ora molto cpioa e incolla)
ma getopt mi sta… massacrando.

fa sparire il valore dell’ultimo parametro.

questo è il codice:

#!/usr/bin/python

import os
import sys
import getopt
import xlrd
import csv

xlsfile = ""
csvfile = ""
qiffile = ""

#
# Usage function
#
def usage():
    print "Usage: " + sys.argv[0] + " -x Excel file -c csv file] -q qif file]"
    print "    or " + sys.argv[0] + " -c csv file -q qif file]"

if len(sys.argv) < 2:
    usage()
    sys.exit(-1)

try:
    options, args = getopt.getopt(sys.argv[1:], "x:c:q")
except getopt.GetoptError:
    usage()
    sys.exit(-1)

for o, a in options:
    print o
    if o == '-x':
	print a
        xlsfile = a
    elif o in ("-c"):
	print a
        csvfile = a
    elif o in ("-q"):
	print a
	qiffile = a

print "xlsfile: " + xlsfile
print "csvfile: " + csvfile
print "qiffile: " + qiffile

se lo eseguo:

./prova -x xf -c cf -q qf
-x
xf
-c
cf
-q

xlsfile: xf
csvfile: cf
qiffile:  

Qualche dritta?

R.

ciao romulus.
Sto studiando anch’io python a tempo mooolto perso, e non sono ancora arrivato a getopt, però un mio amico mi ha consigliato un forum di utenti python molto ben gestito.

%url%
Ti consiglio di chiedere lì, molto probabilmente riceverai maggiori risposte.

Hai dimenticato un : nella stringa di getopt. Il carattere : significa che c’è un parametro associato a quella opzione, non è un separatore di opzioni. La tua stringa dice che x e c accettano un parametro, mentre q non ha parametri. Ti basta mettere usare “x:c:q:” al posto di “x:c:q”. Lo trovi scritto anche nella documentazione python circa http://docs.python.org/2/library/getopt.html

Memoria corta + tastiera sporca :wall: :wall: :wall: :wall:

:clap: :beer:

R.

scusate se mi intrometto nel post con un altro argomento ma per mettere in fedora il path assoluto per python basta mettere nelle prime righe del codice :

#!/usr/bin/python

perché non mi funziona mi sembra solo un commento…

sì va bene oppure
#!/usr/bin/env python
io metto sempre anche in cima:

-*- coding: latin-1 -

-- coding: cp1252 --

Ciao

grazie, ma ho notato che questo serve per vedere i file come se fossero di python e non per impostare una path assoluta per eseguire i file senza digitare:

$python nomefile

stavo cercando un comando che abilitasse gli script di python come se fossero degli eseguibili in linux…

ad esempio se ho il file home/wno/Documenti/fileinpython/script.py non vorei digitare $python nomefile ma solo script.py

#!/usr/bin/env python

in testa al file;

chmod +x /path/nomeFile.py

per renderlo eseguibile;

se vuoi anche evitare di digitare il path metti il file nella cartella bin che si trova nella tua home (se non esiste già crea la cartella), o in /usr/bin se deve essere accessibile a tutti gli utenti.

grazie!