функция python argeparse на выборочной структуре: нераспознанные аргументы - PullRequest
0 голосов
/ 07 июля 2019

Я использую функцию, основанную на argparse, чтобы использовать ее с различными опциями и вычислениями для этих опций.

Это прекрасно работает:

def parseArgument(argv, abv, name, hdescription):
  parser=argparse.ArgumentParser(description='Show calculated data')
  parser.add_argument(abv,
                      name, 
                      help = hdescription, 
                      action = "store_true",
                      )
  args=parser.parse_args()
  return args

args_h = parseArgument(['-y'],"-y", "--humedity", "Calculate humedity average", False)

if args_h.humedity: 
  print("\nHUMEDITY CYCLE: ", DPV(w, 2, HR_CYCLE, count_NC))

Но когда я пытаюсьчтобы добавить больше опций (args_t.temperature), я получу error: unrecognized argument -y

def parseArgument(argv, abv, name, hdescription):
  parser=argparse.ArgumentParser(description='Show calculated data')
  parser.add_argument(abv,
                      name, 
                      help = hdescription, 
                      action = "store_true",
                      )
  args=parser.parse_args()
  return args

args_h = parseArgument(['-y'],"-y", "--humedity", "Calculate humedity average", False)

args_t = parseArgument(['-t'],"-t", "--tempature", "Calculate temp average", False)

if args_h.humedity: 
  print("\nHUMEDITY CYCLE: ", DPV(w, 2, HR_CYCLE, count_NC))
elif args_t.temperature:
  print("\nTEMPERATURE CYCLE", DPV(w,1,TR_CYCLE,count_NC)) 

Я ожидаю использовать эту структуру с различными опциями с функцией argparse:

if args_h.humedity:
  ...
elif args_t.temp:
  ...
elif args_other.other:
  ...

Когда я запускаю script.py -y

usage: cycle.py [-h] [-t]
cycle.py: error: unrecognized arguments: -y```

**When I use script.py -h**
```usage: cicly.py [-h] [-y]
optional arguments:
  -h, --help     show this help message and exit
  -y, --humedity  Calculates humedity average
```
**doesn't show [-t]**

1 Ответ

2 голосов
/ 07 июля 2019

Вам нужно сразу добавить каждую опцию в анализатор, например:

import sys
import argparse
def parse_arguments():
    parser = argparse.ArgumentParser(description='Show calculated data')
    parser.add_argument('-y', '--humidity', 
                        help='Calculate humidity average', 
                        action="store_true")
    parser.add_argument('-t', '--temperature', 
                        help='Calculate temperature average', 
                        action="store_true")
    args = parser.parse_args()
    return args, parser

def main():
    args, parser = parse_arguments()
    if len(sys.argv) < 2:
        return parser.print_help()
    if args.temperature:
        print('will calculate temperature')
    if args.humidity:
        print('will calculate humidity')

if __name__ == "__main__":
    main()

Вызов python calc.py без аргументов дает:

> python args.py
usage: calc.py [-h] [-y] [-t]

Show calculated data

optional arguments:
  -h, --help         show this help message and exit
  -y, --humidity     Calculate humidity average
  -t, --temperature  Calculate temperature average

с некоторыми переключателями:

> python calc.py -y -t
will calculate temperature
will calculate humidity
...