gpt4 book ai didi

Python argparse : How to get simple parsing behavior?

转载 作者:行者123 更新时间:2023-12-01 05:42:51 25 4
gpt4 key购买 nike

参见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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com