有什么方法可以为使用 parser.add_option 创建的选项获取输入,而不为同一选项获取任何输入?

Is there any way to take inputs for a option created using parser.add_option, and not take any input for the same option?

现在,当我输入“python openweather.py --api=key --city=London --temp=fahrenheit ”在命令提示符下,我得到了所需的华氏温度输出,或者即使输入了摄氏温度(“--temp=celcius”)我也得到了所需的摄氏温度输出。

但我进一步要求的是,如果我输入“python openweather.py --api=key --city=London --temp " ,我需要默认的摄氏度输出。 问题是我无法对同一个'--temp'执行此操作,因为我不断收到错误消息:“openweather.py:错误:--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”才能接受输入并在没有输入的情况下离开。感谢任何帮助。

使用 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