【发布时间】:2019-02-09 22:00:45
【问题描述】:
这是我的示例代码:
def function1():
parser = argparse.ArgumentParser(description='Test Cascading Utility')
parser.add_argument('--number', type=str, help='Enter number')
args = parser.parse_args()
x = str(args.number)
squares = float(x)**2
def function2():
parser = argparse.ArgumentParser(description='Test Cascading Utility')
parser.add_argument('--number1', type=str, help='Enter number')
parser.add_argument('--number2', type=str, help='Enter number')
args = parser.parse_args()
x = str(args.number1)
y = str(args.number2)
div = float(x)/float(y)
def main():
choice = sys.argv[1]
if choice == 'Y':
function1()
elif choice == 'N':
function2()
else:
print("Come on, choose a Y or N option.")
if __name__ == '__main__':
main()
我正在尝试创建一个级联 cli 工具,其中基于我输入的一个选项,它运行一个特定的方法。该方法又将有自己的一组参数。
此特定代码引发错误:error: unrecognized arguments: Y
这让我认为“选择”系统参数正在被参数解析器覆盖,那么如何根据运行方法的选择来实现这种级联效果。
这是我第一次深入研究argparse,因此如果问题很愚蠢,请多多包涵。但这是我真正想要实现的。
【问题讨论】:
-
ArgumentParser 用于解析在运行时传递给应用程序的参数。当应用程序启动时,您只会得到这些参数。您不能像这样在单独的函数中创建单独的 ArgParsers 并期望它们具有值。
-
parse_args看着sys.argv[1:]。您的choice在该列表中。您要么必须在调用函数之前将其删除,要么编写解析器以使其不会被该字符串阻塞。另一种可能性是将argv列表传递给函数并使用parse_args(argv)。 -
子解析器机制也可以处理这个 CLI。定义“Y”和“N”子解析器,并为每个子解析器提供所需的参数。
-
这应该会给你一些想法:stackoverflow.com/questions/52103324/…
标签: python python-3.x argparse sys