Как передать более одного аргумента с помощью docopt

Я хочу передать два обязательных аргумента, один необязательный аргумент в мою программу, используя docopt. Код, который я использую:

"""Setup

Usage: myprog.py server_name config [--help] [options] 

Arguments:
    SERVER_NAME        Server Name (a1, a2)
    CONFIG             Config file with full path

Options:
    -h --help
    -r --start      Start the server if yes [default: 'no']
"""

from docopt import docopt

class ServerSetup(object):
    def __init__(self, server_name, config_file, start_server):
        self.server = server_name
        self.config = config_file
        self.start_server = start_server

    def print_msg(self):
        print self.server
        print self.config
        print self.start_server

if __name__ == '__main__':
    args = docopt(__doc__)
    setup = ServerSetup(server_name=args['SERVER_NAME']),
                        config=args['CONFIG']
                        start_rig=args['-r'])
    setup.print_msg()

$python myprog.py a1 /abc/file1.txt

Когда я запускаю вышеуказанную программу с помощью вышеуказанной команды, я получаю сообщение об ошибке, отображающее использование, которое я написал. Что здесь происходит, как я могу использовать более одного «аргумента»?


person Ayush    schedule 19.02.2015    source источник


Ответы (1)


Заключите аргументы в ‹...>, в противном случае они просто угрожают как команды. Это должно работать:

"""Setup

Usage: myprog.py [options] <SERVER_NAME> <CONFIG>

Arguments:
    SERVER_NAME        Server Name (a1, a2)
    CONFIG             Config file with full path

Options:
    -h, --help
    -r, --start        Start the server if yes [default: 'no']
"""

from docopt import docopt

class ServerSetup(object):
    def __init__(self, server_name, config_file, start_server):
        self.server = server_name
        self.config = config_file
        self.start_server = start_server

    def print_msg(self):
        print self.server
        print self.config
        print self.start_server

if __name__ == '__main__':
    args = docopt(__doc__)
    print args
    setup = ServerSetup(server_name=args['<SERVER_NAME>'],
                        config_file=args['<CONFIG>'],
                        start_server=args['--start'])
    setup.print_msg()
person J. P. Petersen    schedule 19.02.2015
comment
Попался. Работает отлично, спасибо!! - person Ayush; 23.02.2015