- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
参见here有关 Python 中各种选项和参数解析选择的优点的相关讨论。
我正在制作一个 diff 脚本,它可以使用 Python 的 difflib
的输出来完成一些巧妙的事情,其中涉及的部分内容是处理它可以被调用的不同方式。例如,Git 会将 7 个参数(第二个和第五个是您想要比较的文件)发送到您配置的 diff 程序,并且大多数 diff 也应该接受作为两个文件参数的输入。有趣的是,git 的 difftool
的 --extcmd=
标志仅使用两个参数调用您指定的差异。
因此,使用 OptionParser 来执行此操作非常容易,因为它只为您提供参数列表,我可以获取第二个和第五个参数并将它们发送到 fileinput
。
我确实注意到 pydoc 上有一个大横幅,上面写着它已被弃用,所以我正在查看argparse
。
我根本不清楚是否可以配置 argparse 来让您的程序接受一系列位置参数,而无需选择“启动它”。这就是我所需要的,因为我无法改变方式,例如Git 会调用 diff。
无论如何,我最终对 sys.argv 进行了一些非常琐碎的操作,这毕竟是我在这种特殊情况下应该开始做的事情。
if len(sys.argv) == 8:
# assume this was passed to git; we can of course do
# some parsing to check if we got valid git style args
args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
args = sys.argv[:1]
else:
sys.exit("Not a valid number of args (2 or 7) to this diff program")
print "Files: " + ' '.join(args)
如何使用 argparse 来实现一个仅尝试打开和读取其所有参数的程序?
原因是,对于argparse
来说,要弃用parseopt
,它必须能够复制其所有功能(在合理范围内)。
最佳答案
只需添加一个前面没有破折号的参数。
import argparse
parser = argparse.ArgumentParser()
# You can change nargs to '+' for at least one argument
parser.add_argument('positional', nargs=2) # Positionals have no dashes
parser.add_argument('second_positional', nargs=1)
parser.add_arguemnt('--optional', '-o') # Optionals have dashes
args = parser.parse_args()
print args['positional'] # Your first two positional arguments
print args['second_positional'] # Second set
print args['optional'] # An optional argument
关于Python argparse : How to get simple parsing behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074959/
我是一名优秀的程序员,十分优秀!