Есть ли способ принять входные данные для опции, созданной с использованием parser.add_option, и не принимать никаких входных данных для той же опции? - PullRequest
1 голос
/ 13 октября 2019

Теперь, когда я набираю "python openweather.py --api = key --city = London --temp = fahrenheit" в командной строке, я получаю желаемый вывод температуры в градусах Фаренгейта или даже есливведен градус Цельсия ("--temp = celcius") Я получаю желаемую выходную температуру в градусах Цельсия.

Но что мне еще нужно, так это то, что если я наберу "python openweather.py --api = ключ --city = London --temp ", по умолчанию требуется вывод в градусах Цельсия. И проблема в том, что я не могу сделать это для того же «--temp», потому что я продолжаю получать сообщение об ошибке: «openweather.py: error: --temp опция требует 1 аргумент» для любой вещи, которую я пытаюсь.

Ниже приведен код, который я использую:

parser = OptionParser()

parser.add_option('--api', action='store', dest='api_key', help='Must provide api token to get the api request')

parser.add_option('--city', action='store', dest='city_name', help='Search the location by city name')

parser.add_option('--temp', action='store', dest='unit', help='Display the current temperature in given unit')

Поэтому мне требуется тот же '--temp', чтобы иметь возможность принимать входные данные и оставаться без входных данных. Любая помощь приветствуется.

1 Ответ

1 голос
/ 13 октября 2019

Используйте nargs='?' и установите значение по умолчанию с помощью const='farenheit'

import argparse

parser  = argparse.ArgumentParser()
parser.add_argument('--temp', '-t', nargs='?', type=str, const='farenheit')

c = parser.parse_args()

# Show what option was chosen.
# If --temp was not used, c.temp will be None
# If -- temp was used without argument, the default value defined in 
# 'const='farenheit' will be used.
# If an argument to --temp is given, it will be used.

print(c.temp)

Образцы прогонов:

thierry@tp:~$ python test.py
None

thierry@tp:~$ python test.py --temp
farenheit

thierry@tp:~$ python test.py --temp celsius
celsius
...