option argument length
Ritesh Raj Sarraf
rrs at researchut.com
Wed Dec 7 07:43:36 EST 2005
On Tue, 6 Dec 2005, Peter Otten wrote:
> Ritesh Raj Sarraf wrote:
>
>> I'm using this for "option arguments" which are mutually inclusive.
>> But I want the user to pass atleast one "option argument" for the program
>> to function properly.
>>
>> For example, I have an option "--fetch-update" which requires a file "foo"
>> to check what it has to fetch. If the file is provided as an argument, it
>> uses it, else I add a parser.set_defaults("foo") which makes the program
>> to look for it in the current working directory.
>>
>> WHen the program see the "--fetch-update" option, it should execute the
>> required code. Now how do I check if at least one option has been passed
>> at the command-line ?
>> I have multiple options but I have parser.set_defaults() for each of them.
>
> I'm sorry I don't understand your example. Wouldn't you need at least two
> options to demonstrate "mutually inclusive" options? The set_default()
> method seems to accept only keyword arguments -- but even it were used
> correctly I'm still unclear why you would need it at all.
>
> Perhaps you can post a few sample invocations (both correct and illegal) of
> your script together with a description (in English, not code) of how the
> script should react?
>
> Peter, puzzled
>
>
try:
version = "0.6b"
reldate = "03/10/2005"
copyright = "(C) 2005 Ritesh Raj Sarraf - RESEARCHUT (http://www.researchut.com/)"
#FIXME: Option Parsing
# There's a flaw with either optparse or I'm not well understood with it
# Presently you need to provide all the arguments to it to work.
# No less, no more. This needs to be converted to getopt sometime.
#parser = OptionParser()
#parser = optparse.OptionParser()
parser = optparse.OptionParser(usage="%prog [OPTION1, OPTION2, ...]", version="%prog " + version)
parser.add_option("-d","--download-dir", dest="download_dir", help="Root directory path to save the downloaded files", action="store", type="string")
parser.set_defaults(download_dir="foo")
parser.add_option("-s","--cache-dir", dest="cache_dir", help="Root directory path where the pre-downloaded files will be searched. If not, give a period '.'",action="store", type="string", metavar=".")
parser.set_defaults(cache_dir=".")
#parser.set_defaults(cache_dir=".")
#parser.add_option("-u","--uris", dest="uris_file", help="Full path of the uris file which contains the main database of files to be downloaded",action="store", type="string")
# We'll have additional options
# --set-update - This will extract the list of uris which need to be fetched
# --fetch-update - This will fetch the list of uris which need for update.
# --install-update - This will install the fetched database files
# The same will happen for upgradation.
# --set-upgrade - This will extract the list of uris which need to be fetched
# --fetch-upgrade - This will fetch the list of uris which need for upgrade
# --install-upgrade - This will install the fetched database files
parser.add_option("","--set-update", dest="set_update", help="Extract the list of uris which need to be fetched for _updation_", action="store", type="string", metavar="foo")
parser.set_defaults(set_update="foo")
parser.add_option("","--fetch-update", dest="fetch_update", help="Fetch the list of uris which are needed for _updation_.", action="store", type="string", metavar="foo")
parser.set_defaults(fetch_update="foo")
parser.add_option("","--install-update", dest="install_update", help="Install the fetched database files ", action="store", type="string", metavar="foo.zip")
parser.set_defaults(install_update="foo.zip")
parser.add_option("","--set-upgrade", dest="set_upgrade", help="Extract the list of uris which need to be fetched ", action="store", type="string", metavar="foo.dat")
parser.set_defaults(set_upgrade="foo.dat")
parser.add_option("","--fetch-upgrade", dest="fetch_upgrade", help="Fetch the list of uris which are needed ", action="store", type="string", metavar="foo.dat")
parser.set_defaults(fetch_upgrade="foo.dat")
parser.add_option("","--install-upgrade", dest="install_upgrade", help="Install the fetched packages ", action="store", type="string", metavar="foo-fetched.zip")
parser.set_defaults(install_ugprade="foofetched.zip")
(options, args) = parser.parse_args()
#parser.check_required("-d", "-s", "-u")
#if len(arguments) != 2:
# parser.error("Err! Incorrect number of arguments. Exiting")
if len(options) != 1 or len(options) > 2:
print len(args)
parser.error("No arguments were passed\n")
sys.exit(1)
elif not options.set_upgrade and options.upgrade_type:
parser.error("Only options --set-upgrade and --upgrade-type are mutually inclusive\n")
sys.exit(1)
Thanks,
rrs
--
Ritesh Raj Sarraf
RESEARCHUT -- http://www.researchut.com
"Stealing logic from one person is plagiarism, stealing from many is research."
"Necessity is the mother of invention."
More information about the Python-list
mailing list