接受用户输入的Argparse参数

时间:2018-11-19 18:11:42

标签: python argparse

如何使用用户提示定义每个参数的浮点值?目前,我使用的是default = x,但宁愿允许用户定义一些变量,然后再将它们收集在一起并传递给函数。

我认为我可以做类似的事情:

first = input("first float") 
second = input("second float")
third = input("third float")

...但是我得到了:TypeError(“ * =:'float'和'NoneType'”不支持的操作数类型),

这里的代码可以正常工作,但是使用默认= x vs.用户提示。

import sys
import argparse

if __name__ == "__main__":
    args = sys.argv
    args.pop(0)
    arg_parser = argparse.ArgumentParser("Help")

    arg_parser.add_argument("--first", type=float, help="first value", default=1)
    arg_parser.add_argument("--second", type=float, help="second value", default=2)
    arg_parser.add_argument("--third", type=float, help="third value", default=3)
    args = arg_parser.parse_args(args)    
    whatever = WhateverWhatever(args.first, args.second, args.third)
    whatever.start()

class WhateverWhatever:
    def __init__(self, first = 1, second = 2, third = 3):
        self.first = first
        self.second = second
        self.third = third

3 个答案:

答案 0 :(得分:1)

您可以通过编写代码在控制台中运行

python <PythonFileName.py> --first=<first input> --second=<second input> --third=<third input>

您不需要在代码中编写输入法。

答案 1 :(得分:0)

默认解析使用instanceof

sys.argv[1:]

您还可以提供类似的列表

args = arg_parser.parse_args() 

args = arg_parser.parse_args('--first 1 --second 23 --third 42'.split()) 测试到

时,这是一个好主意
argparse

查看解析器产生了什么。

可以使用以下方法生成匹配的命名空间对象:

print(args)

或者 args = argparse.Namespace(first=1, second=43, third=23) 可以是具有相关属性的任何对象,例如args等。

答案 2 :(得分:-1)

结果非常明显。

import sys
import argparse

if __name__ == "__main__":
    args = sys.argv
    args.pop(0)
    arg_parser = argparse.ArgumentParser("Help")

    arg_parser.add_argument("--first", type=float, help="first value", default=1)
    arg_parser.add_argument("--second", type=float, help="second value", default=2)
    arg_parser.add_argument("--third", type=float, help="third value", default=3)
    args = arg_parser.parse_args(args)  

    args.first = float(input("First value"))
    args.second = float(input("Second value"))
    args.third = float(input("Third value"))

    whatever = WhateverWhatever(args.first, args.second, args.third)
    whatever.start()

class WhateverWhatever:
    def __init__(self, first = 1, second = 2, third = 3):
        self.first = first
        self.second = second
        self.third = third