我想以这种方式使用我的程序:
pythonScript -f filename
但如果我忘了-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"
答案 0 :(得分: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
基本上,如果给出了一个文件选项,它会覆盖位置参数。