Entendendo OptionParser

Eu estava tentandooptparse e este é o meu script inicial.

#!/usr/bin/env python

import os, sys
from optparse import OptionParser

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-d", "--dir", type="string",
                  help="List of directory",
                  dest="inDir", default=".")

parser.add_option("-m", "--month", type="int",
                  help="Numeric value of the month", 
                  dest="mon")

options, arguments = parser.parse_args()

if options.inDir:
    print os.listdir(options.inDir)

if options.mon:
    print options.mon

def no_opt()
    print "No option has been given!!"

Agora, é isso que estou tentando fazer:

Se nenhum argumento for fornecido com a opção, ele assumirá o valor "padrão". isto émyScript.py -d apenas listará o diretório atual ou-m sem nenhum argumento levará o mês atual como argumento.Para o "--month", apenas 01 a 12 são permitidos como argumentoDeseja combinar mais de uma opção para executar tarefas diferentes, ou seja,myScript.py -d this_dir -m 02 fará algo diferente de -d e -m como indivíduo.Irá imprimir "Nenhuma opção foi dada !!"SOMENTE se nenhuma opção for fornecida com o script.

Isso é factível? Visitei o site doc.python.org para obter respostas possíveis, mas como iniciante em python, me vi perdido nas páginas. É muito apreciada sua ajuda; desde já, obrigado. Felicidades!!

Atualização: 16/01/11

Acho que ainda estou perdendo alguma coisa. Esta é a coisa no meu script agora.

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-m", "--month", type="string",
                  help="select month from  01|02|...|12",
                  dest="mon", default=strftime("%m"))

parser.add_option("-v", "--vo", type="string",
                  help="select one of the supported VOs",
                  dest="vos")

options, arguments = parser.parse_args()

Este é o meu objetivo:

executar o script sem nenhuma opção, retornaráoption.mon [trabalhando]execute o script com a opção -m, com retornooption.mon [trabalhando]executar o script com a opção ONLY -v, retornará ONLYoption.vos [não está funcionando]executar o script com -m e -v optting, fará algo diferente [ainda para chegar ao ponto]

Quando executo o script com a opção -m, ele está imprimindooption.mon primeiro e depoisoption.vos, o que eu não quero. Realmente aprecio se alguém puder me colocar na direção certa. Felicidades!!

3ª Atualização

    #!/bin/env python

    from time import strftime
    from calendar import month_abbr
    from optparse import OptionParser

    # Set the CL options 
    parser = OptionParser()
    usage = "usage: %prog [options] arg1 arg2"

    parser.add_option("-m", "--month", type="string",
                      help="select month from  01|02|...|12", 
              dest="mon", default=strftime("%m"))

    parser.add_option("-u", "--user", type="string",
                      help="name of the user", 
              dest="vos")

    options, arguments = parser.parse_args()

    abbrMonth = tuple(month_abbr)[int(options.mon)]

    if options.mon:
        print "The month is: %s" % abbrMonth 

    if options.vos:
        print "My name is: %s" % options.vos 

    if options.mon and options.vos:
        print "I'm '%s' and this month is '%s'" % (options.vos,abbrMonth)

É isso que o script retorna quando executado com várias opções:

# ./test.py
The month is: Feb
#
# ./test.py -m 12
The month is: Dec
#
# ./test.py -m 3 -u Mac
The month is: Mar
My name is: Mac
I'm 'Mac' and this month is 'Mar'
#
# ./test.py -u Mac
The month is: Feb
My name is: Mac
I'm 'Mac' and this month is 'Feb'

Eu gosto de ver apenas:

 1. `I'm 'Mac' and this month is 'Mar'` - as *result #3*  
 2. `My name is: Mac` - as *result #4*

O que estou fazendo errado? Felicidades!!

4ª Atualização:

Respondendo a mim mesmo: dessa forma, consigo o que estou procurando, mas ainda não estou impressionado.

#!/bin/env python

import os, sys
from time import strftime
from calendar import month_abbr
from optparse import OptionParser

def abbrMonth(m):
    mn = tuple(month_abbr)[int(m)]
    return mn

# Set the CL options 
parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-m", "--month", type="string",
                  help="select month from  01|02|...|12",
                  dest="mon")

parser.add_option("-u", "--user", type="string",
                  help="name of the user",
                  dest="vos")

(options, args) = parser.parse_args()

if options.mon and options.vos:
    thisMonth = abbrMonth(options.mon)
    print "I'm '%s' and this month is '%s'" % (options.vos, thisMonth)
    sys.exit(0)

if not options.mon and not options.vos:
    options.mon = strftime("%m")

if options.mon:
    thisMonth = abbrMonth(options.mon)
    print "The month is: %s" % thisMonth

if options.vos:
    print "My name is: %s" % options.vos

e agora isso me dá exatamente o que eu estava procurando:

# ./test.py 
The month is: Feb

# ./test.py -m 09
The month is: Sep

# ./test.py -u Mac
My name is: Mac

# ./test.py -m 3 -u Mac
I'm 'Mac' and this month is 'Mar'

Essa é a única maneira de fazer isso? Não parece o "melhor caminho" para mim. Felicidades!!

questionAnswers(3)

yourAnswerToTheQuestion