限制传入的参数数量

时间:2015-09-30 02:48:55

标签: python argparse

我正在使用 {{player.playerName}} 来获取输入文件列表:

argparse

然而,这为用户传递了import argparse p = argparse.ArgumentParser() p.add_argument("infile", nargs='+', type=argparse.FileType('r'), help="copy from") p.add_argument("outfile", help="copy to") args = p.parse_args() 的大门,其中源目录可能有数百万个文件,shell扩展可能会超出解析器。我的问题是:

  1. 有没有办法禁用shell扩展(*)?

  2. 如果没有,是否有办法在输入文件组装成列表之前对输入文件的数量设置上限?

2 个答案:

答案 0 :(得分:1)

(1)不,shell扩展是由shell完成的。运行Python时,命令行已经扩展。使用"*"'*'将停用它,但也会在shell上发生。

(2)是的,在代码的早期获得sys.argv的长度,如果太长则退出。

此外,大多数shell都有扩展的内置限制。

答案 1 :(得分:0)

如果您担心infile值太多,请不要使用FileType

p.add_argument("infile", nargs='+', help="copy from")

只需接受文件名列表即可。这不会让你付出太多代价。然后,您可以根据需要打开和处理尽可能多的文件。

FileType在解析名称时打开文件。这对于您将在小脚本中立即使用的一些文件来说是可以的。但通常您不希望或不需要立即打开所有这些文件。在现代Python中,我们鼓励您在with context中打开文件,因此立即关闭(而不是在脚本完成之前一直闲置)。

FileType处理'-'stdin值。如果无法打开文件,它将发出一个很好的错误报告。但这就是你想要的吗?或者你愿意处理每个文件,跳过坏名字。

整体FileType是一种便利,但在严肃的应用程序中通常是一个糟糕的选择。

还有其他需要担心的问题 - outfile是(可能)很长的文件列表中的最后一个,' +'输入1和1。 argparse接受了,但它可能会带来问题。例如,如果用户忘记提供' outfile&#39 ;?然后最后一个输入文件将用作outfile。该错误可能导致无意中重写文件。使用'-o','--outfile',可能更安全,使用户明确标记outfile。用户可以先给它,所以他不会忘记。

一般来说' +'和' *'最后使用时,定位是最安全的。