我有一个发送GET请求的python脚本.它使用Argparse来获取三个参数:
示例用法可能是:
$ python get.py 198.252.206.16 stackoverflow.com /questions/ask
但是,在大多数情况下,只需要提供主机和资源,因为主机将解析为该地址:
$ host -t a stackoverflow.com
stackoverflow.com has address 198.252.206.16
Run Code Online (Sandbox Code Playgroud)
所以期望的用法可能是:
$ python get.py stackoverflow.com /questions/ask
Run Code Online (Sandbox Code Playgroud)
如何设置Argparse以使Address参数的默认值为Host参数的值?
我被要求显示当前解析参数的代码.这里是:
import argparse
parser = argparse.ArgumentParser(description=
'Send a GET request and obtain the HTTP response header and/or body.')
parser.add_argument("-v", "--verbose",
help="Turn on verbose mode.",
action="store_true")
parser.add_argument("-p", "--port",
type=int,
default=80,
help="Which port to use when sending the GET request."
parser.add_argument("address",
help="Where to send the GET request to.")
parser.add_argument("host",
help="Which Host to declare in the GET request.")
parser.add_argument("resource",
help="Which resource to request.")
parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
nargs='?'很好地处理这种情况.如果只有2个字符串,则将它们分配给host和resource,并address获取其默认值(None).如果3个字符串,它们会分配给所有3.如果有帮助,认为行为?的re模式.
解析器完成后很容易将host值赋值给address.尝试在内部进行该任务没有意义parse_args(因为主机值尚不知道).
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("address", nargs='?')
parser.add_argument("host")
parser.add_argument("resource")
args = parser.parse_args()
if args.address is None:
args.address = args.host
print(args)
Run Code Online (Sandbox Code Playgroud)
用法是:
usage: get.py [-h] [address] host resource
Run Code Online (Sandbox Code Playgroud)
用[]整齐的标记可选的位置参数.
| 归档时间: |
|
| 查看次数: |
13190 次 |
| 最近记录: |