2

我想以这种方式使用我的程序:

pythonScript -f 文件名

但是如果我忘记了-f,我仍然想得到文件名。

所以我希望这个“pythonScript 文件名”也可以工作(->我可以从 args.fileName 或从处理异常中获取文件名)

我知道这一定很容易,我只是找不到办法。任何人都可以帮助我吗?谢谢

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-f', action='store', dest='fileName',
    default = None, type=str, help='The file name')

try:
    args = parser.parse_args()
except:
    print "xxx"
4

1 回答 1

3

如果您希望 -f 是必需的,您可以使用argparse来实现。只需在 add_argument 函数中包含“required = True”。

请记住,必需的选项是矛盾的。不建议使选项成为必需,但有时会有所帮助。如果未给出该选项,则目标仍然是 None 值(或者它被分配您给出的任何默认值,在您的示例中为 None )。

编辑:刚刚看到你的编辑,我明白你现在在问什么。optparse 使这个更简单的 IMO。似乎对于带有 argparse 的位置参数,您需要使用 add_argument。

真的没有简单的方法让 argparse 为你做这件事。您可以使用以下方法创造性地模拟它:

parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?')
parser.add_argument('-f', dest='file_opt')
args = parser.parse_args()
if args.file_opt:
    args.file = args.file_opt

基本上,如果给出了文件选项,它会覆盖位置参数。

于 2011-08-26T15:28:21.420 回答