有关我们在 Python 中的各种选项和 arg 解析选择的优点的相关讨论,请参见此处。
我正在制作一个 diff 脚本,它对 Python 的输出做一些简洁的事情,difflib
其中涉及的部分内容是处理可以调用它的不同方式。例如,Git 将发送 7 个参数(第二个和第五个是您想要比较的文件)到您配置它的 diff 程序,并且大多数差异也应该接受作为两个文件参数的输入。有趣的是, git 的difftool
标志--extcmd=
调用了您仅使用两个参数指定的差异。
所以,使用 OptionParser 来做这件事真的很容易,因为它只是给你一个 args 列表,我可以抓住第二个和第五个并将它们发送到fileinput
.
我确实注意到了 pydoc 上的大横幅,上面写着它已被弃用,所以我在看argparse
.
我根本不清楚是否可以配置argparse
为让您的程序接受一系列位置参数而没有“启动它”的选项。这就是我所需要的,因为我无法改变例如 Git 调用不同的方式。
无论如何,我最终对 进行了一些非常微不足道的操作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
它必须可以复制其所有功能(在合理范围内)。