Estoy teniendo problemas con este código getopt()
en un script que estoy escribiendo que hace un poco de manipulación de archivos dado 2 parámetros necesarios (nombre de archivo de entrada y salida) y/o 2 argumentos opcionales/situacionales (depuración o ayuda).getopt() no aplica los argumentos necesarios?
Código es:
def main(argv):
try:
opts, args = getopt.getopt(argv, "i:o:dh", ["input-file=", "output-file=", "debug", "help"])
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-d", "--debug"):
global _debug
_debug = 1
elif opt in ("-i", "--input-file"):
u_input_file_name = arg
elif opt in ("-o", "--output-file"):
u_output_file_name = arg
De acuerdo con la getopt()
documentación:
opciones que requieren un argumento seguido de dos puntos ('
:
'; es decir, el mismo formato que Unix getopt() usos).
El problema es que, como yo lo entiendo, las variables/args seguido de un :
deben aplicarse según sea necesario ... pero las opciones i
y o
no se están aplicando. La ejecución de este fragmento Garners un error sobre u_input_file_name
que se hace referencia antes de ser asignado:
[[email protected] ~/python]$ ./inco_add_cm_mpscli.py -o google
Traceback (most recent call last):
File "./inco_add_cm_mpscli.py", line 57, in <module>
main(sys.argv[1:])
File "./inco_add_cm_mpscli.py", line 25, in main
infile = open(u_input_file_name, 'r')
UnboundLocalError: local variable 'u_input_file_name' referenced before assignment
¿Qué estoy haciendo mal?
¿Cuál es el propósito de las opciones que delimitan que ** requiere ** un argumento si el requisito no se trata? –
Porque cuando getopt() analiza la línea de comando, necesita saber que un token es el argumento de la opción anterior o es un nuevo argumento/opción. Por lo tanto, en su ejemplo, no exige que aparezca -i o -o, pero una vez que aparece -i o -o, Python trata el token inmediatamente después como argumento. – evergreen
¿No identifica el token como precedido por - o - para opciones largas o cortas en consecuencia? –