docopt логический аргумент python

Я использую следующие аргументы для своего скрипта с doctopt

Usage:
GaussianMixture.py --snpList=File --callingRAC=File

Options:
-h --help     Show help.
snpList     list snp txt
callingRAC      results snp

Я хотел бы добавить аргумент, который имеет условное последствие для моего сценария: исправить мои данные или не исправлять мои данные. Что-то типа :

Usage:
GaussianMixture.py --snpList=File --callingRAC=File  correction(--0 | --1)

Options:
-h --help     Show help.
snpList     list snp txt
callingRAC      results snp
correction      0 : without correction | 1 : with correction 

И я хотел бы добавить в свой скрипт if в некоторые функции

def func1():
  if args[correction] == 0:
      datas = non_corrected_datas
  if args[correction] == 1:
      datas = corrected_datas

Но я не знаю, как написать это ни в использовании, ни в моем сценарии.


person Elysire    schedule 07.12.2016    source источник


Ответы (2)


EDIT: Мой первоначальный ответ не учитывал требования OP, чтобы --correction была обязательной. Синтаксис был неверным в моем первоначальном ответе. Вот проверенный рабочий пример:

#!/usr/bin/env python
"""Usage:
    GaussianMixture.py --snpList=File --callingRAC=File --correction=<BOOL>

Options:
    -h, --help          Show this message and exit.
    -V, --version       Show the version and exit
    --snpList         list snp txt
    --callingRAC      results snp
    --correction=BOOL Perform correction?  True or False.  [default: True]

"""

__version__ = '0.0.1'

from docopt import docopt

def main(args):
    args = docopt(__doc__, version=__version__)
    print(args)

    if args['--correction'] == 'True':
        print("True")
    else:
        print("False")

if __name__ == '__main__':
    args = docopt(__doc__, version=__version__)
    main(args)

Пожалуйста, дайте мне знать, если это работает для вас.

person Dustin Keib    schedule 07.12.2016
comment
Спасибо за это решение, это работает. Но я действительно хотел бы иметь обязательный аргумент с исправлением или без, потому что пользователи могут забыть необязательный аргумент и иметь данные, не исправленные по ошибке, если они не знакомы с этим, где, как если бы это было обязательным, у них будет ошибка. Но я могу добавить предупреждение, пока найду лучшее решение :) все равно спасибо! - person Elysire; 07.12.2016
comment
Вы можете попробовать сделать исправление обязательным (удалить скобки) и присвоить ему значение true/false, например: - person Dustin Keib; 08.12.2016
comment
Использование: GaussianMixture.py --snpList=Файл --callingRAC=Исправление файла=(Истина | Ложь) - person Dustin Keib; 08.12.2016
comment
Последний комментарий не включал правильный синтаксис --correction=(True | False) - я обновил свой ответ, чтобы считать его обязательным параметром - person Dustin Keib; 08.12.2016
comment
Не забудьте поставить одинарное - и двойное тире -- в части параметров. Аргументы параметров также должны присутствовать в части параметров. - person J. P. Petersen; 08.12.2016
comment
Спасибо J.P., хорошая мысль! Я обновил свой ответ соответственно. - person Dustin Keib; 08.12.2016

Не все параметры должны иметь аргументы в docopt. Другими словами, вместо этого вы можете использовать аргументы flag. Это самый простой способ получить логические значения от пользователя. При этом вы можете просто сделать следующее.

"""
Usage:
  GaussianMixture.py (--correction | --no-correction)

Options:
  --correction      With correction
  --no-correction   Without correction
  -h --help     Show help.
"""
import docopt


if __name__ == '__main__':
    args = docopt.docopt(__doc__)
    print(args)

person bombs    schedule 15.06.2020