2009-10-08 5 views
5

si estoy usando esto con getopt:¿Por qué no funciona getopt si se pasa sys.argv por completo?

import getopt 
import sys 

opts,args = getopt.getopt(sys.argv,"a:bc") 
print opts 
print args 

opts estará vacía. No se crearán tuplas. Sin embargo, si uso sys.argv[1:], todo funciona como se espera. No entiendo por qué es eso. ¿Alguien quiere explicar?

Respuesta

13

El primer elemento de sys.argv (sys.argv[0]) es el nombre del script que está siendo ejecutado. Debido a que este es el nombre del script (probablemente) no es un argumento válido (y probablemente no comienza con un - o -- de todos modos), getopt no lo reconoce como un argumento. Debido a la naturaleza de cómo getopt obras, cuando ve algo que no es un indicador de línea de comandos (algo que no comience con - o --), se detiene el procesamiento de las opciones de línea de comandos (y pone el resto de los argumentos en args), porque asume que el resto de los argumentos son elementos que serán manejados por el programa (como nombres de archivo u otros argumentos "requeridos").

+0

Entiendo ahora. ¡Gracias! – Geo

6

Es de diseño. Recuerde que sys.argv [0] es el nombre del programa en ejecución, y getopt no lo quiere.

A partir de los documentos:

analiza sintácticamente las opciones de línea de comandos y lista de parámetros. args es la lista de argumentos a ser analizada, sin la referencia que lleva a el programa en ejecución. Normalmente, esto significa sys.argv [1:]. opciones es la cadena de opción cartas que el guión quiere reconocer, con opciones que requieren un argumento seguido de dos puntos (':'; es decir, el mismo formato que utiliza Unix getopt()).

http://docs.python.org/library/getopt.html

Cuestiones relacionadas