2015-02-19 3 views
1

Я хочу передать два обязательных аргумента, один необязательный аргумент для моей программы, используя 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() 

$ питон myprog.py a1 /abc/file1.txt

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

ответ

5

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

"""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() 
+1

Gotcha. Отлично работает, спасибо! – Ayush

Смежные вопросы