python - argparse: identify which subparser was used

ID : 20384

viewed : 29

Tags : pythonargparsepython

Top 5 Answer for python - argparse: identify which subparser was used

vote vote

92

A simpler solution is to add dest to the add_subparsers call. This is buried a bit further down in the documentation:

[...] If it is necessary to check the name of the subparser that was invoked, the dest keyword argument to the add_subparsers() call will work

In your example replace:

subparsers = parser.add_subparsers(help='commands') 

with:

subparsers = parser.add_subparsers(help='commands', dest='command') 

Now if you run:

print parser.parse_args(["all"]) 

you will get

Namespace(command='all') 
vote vote

82

Edit: Please see quornian's answer to this question, which is better than mine and should be the accepted answer.

According to the argparse documentation the result of parser.parse_args(...) will "only contain attributes for the main parser and the sub parser that was selected". Unfortunately this may not be enough information to determine which sub parser was used. The documentation recommends using the set_defaults(...) method on the sub parser to solve this problem.

For example, I've added calls to set_defaults() to your code:

import argparse  parser = argparse.ArgumentParser( version='pyargparsetest 1.0' ) subparsers = parser.add_subparsers(help='commands')  # all all_parser = subparsers.add_parser('all', help='process all apps') all_parser.set_defaults(which='all')  # app app_parser = subparsers.add_parser('app', help='process a single app') app_parser.add_argument('appname', action='store', help='name of app to process') app_parser.set_defaults(which='app') 

Now if you run

print parser.parse_args(["all"]) 

The result is

Namespace(which='all') 

Check out the add_subparsers() documentation for more information and another example.

vote vote

71

if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){   alert("option doesn't exist!"); } 
vote vote

61

var exists = $("#yourSelect option")                .filter(function (i, o) { return o.value === yourValue; })                .length > 0; 

This has the advantage of automatically escaping the value for you, which makes random quotes in the text much easier to deal with.

vote vote

51

Although most of other answers worked for me I used .find():

if ($("#yourSelect").find('option[value="value"]').length === 0){     ... } 

Top 3 video Explaining python - argparse: identify which subparser was used

Related QUESTION?