为了账号安全,请及时绑定邮箱和手机立即绑定

蟒蛇,argparse。-opt1 -part-of-opt1 <参数> 怎么样?

蟒蛇,argparse。-opt1 -part-of-opt1 <参数> 怎么样?

慕婉清6462132 2021-06-03 14:33:08
parser.add_argument('-i', required=True)  # One directory pathparser.add_argument('-d', required=True)  # Output database pathparser.add_argument('-t', required=True)  # DDL-script pathparser.add_argument('-c -i', required=True) # Another directory path我像这样运行.py脚本:python.exe s.py -c -i D:\Temp\dir1 -d D:\Temp\out.db -t D:\Temp\ddl.sql -i D:\Temp\dir2并得到错误:usage: s.py [-h] -i I -d D -t T -c -i C _Is.py: error: argument -c -i: expected one argument如何在不重命名参数名称的情况下使用它?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

看看sys.argv[1:]名单。我希望它会是


['-c', '-i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db', '-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2']

请注意,'-c -i' 是分开的。因为允许缩写,所以-c被接受为“-c -i”标志的缩写。但该字符串后跟“-i”和“D:...”。这是两个论点,而不仅仅是一个。因此错误。


是的,您可以引用“-c -i”,这样外壳就不会拆分它,但即使这样也不能正常工作。我认为指定这样的标志没有任何意义。它不是建立在之前定义的“-i”动作之上。


In [113]: parser.parse_args(['-c -i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db', 

   '-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2'])

Out[113]: Namespace(d='D:\\Temp\\out.db', i='D:\\Temp\\dir2', 

   t='D:\\Temp\\ddl.sql', **{'c _i': 'D:\\Temp\\dir1'})

In [122]: getattr(Out[113],'c _i')

Out[122]: 'D:\\Temp\\dir1'


查看完整回答
反对 回复 2021-06-16
?
郎朗坤

TA贡献1921条经验 获得超9个赞

详细说明user2357112的评论,这个“化合物名称”不是一回事。在我的头顶上,我无法命名执行此操作的单个程序的单个标志。

即使您设法实现了这一点(没有什么是不可能的,尽管 argparse 将无济于事),这个设计决定也会让您的程序用户大吃一惊。



查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信