Есть ли способ ввести строку, начинающуюся со знака «-», в качестве аргумента командной строки, используя модуль argparse? (без использования флагов) - PullRequest
2 голосов
/ 20 января 2020

поэтому у меня есть этот код

# driver code    
if __name__ == "__main__":

    # parse command line arguments 
    parser = argparse.ArgumentParser()
    parser.add_argument("InputDataFile", help="Enter the name of CSV file with .csv extention",type=str)
    parser.add_argument("Weights", nargs=1, help="Enter the weight vector comma separated" ,type=str)
    parser.add_argument("Impacts", nargs=1, help="Enter the impact vector comma separated",type=str)
    args = parser.parse_args()


    main(vars(args))

, и я хочу ввести строку вроде

python top2.py data.csv "0,1,1,1" "-,+,+,+"

, но я получаю ошибку ввода:

usage: top2.py [-h] InputDataFile Weights Impacts
top2.py: error: the following arguments are required: Impacts

код работает правильно, если первым символом входной строки является знак «+», где знак «-» находится между ними (как в «+, -, +»). Но если первый символ "-", я получаю вышеуказанную ошибку. Я предполагаю, что синтаксический анализатор использует дефис «-» в качестве начала другого флага и его аргументов.

Я не смог найти в Интернете никакого соответствующего материала, пожалуйста, помогите.

И это важно вводить строку указанным выше способом, поэтому нельзя изменить формат ввода.

edit: если я введу строку как «-, +, +, +» или добавлю пробелы в любом месте строки, он код работает нормально.

Ответы [ 2 ]

4 голосов
/ 20 января 2020

Вы можете просто добавить lone -- в вашу командную строку, чтобы указать «это конец опций», например:

python top2.py -- data.csv "0,1,1,1" "-,+,+,+"

Все после -- анализируется как позиционное аргумент, а не вариант.

0 голосов
/ 20 января 2020

Пока я нашел способ ...

argparse предоставляет нам возможность настроить префиксный символ. Мы можем сделать это

my_parser = argparse.ArgumentParser(prefix_chars='/')

, и вместо знака дефиса по умолчанию все наши флаги / необязательные аргументы теперь могут быть доступны с помощью '/'. например, для справки, используйте эту

python top2.py /h

часть вывода:

optional arguments:
  /h, //help     show this help message and exit
...