Python,optparse和文件掩码

时间:2008-11-23 16:12:43

标签: python optparse

if __name__=='__main__':
    parser = OptionParser()
    parser.add_option("-i", "--input_file", 
                    dest="input_filename",
                      help="Read input from FILE", metavar="FILE")

    (options, args) = parser.parse_args()
    print options

结果是

$ python convert.py -i video_*
{'input_filename': 'video_1.wmv'}

当前文件夹中有video_ [1-6] .wmv。 问题是video_ *成为video_1.wmv的原因。我做错了什么?

4 个答案:

答案 0 :(得分:8)

Python与此无关 - 它是shell。

呼叫

$ python convert.py -i 'video_*'

它会传递那个通配符。

其他六个值作为args传入,未附加到-i,就像您运行python convert.py -i video_1 video_2 video_3 video_4 video_5 video_6一样,-i仅附加到下一个参数

尽管如此,您最好的选择可能只是从args读取您的输入文件名,而不是使用options.input

答案 1 :(得分:2)

打印args,你会看到其他文件的去向......

它们在argv中被转换为单独的参数,而optparse只将第一个参数作为input_filename选项的值。

答案 2 :(得分:1)

澄清:

aprogram -e *.wmv
在Linux shell上,所有通配符(* .wmv)都由shell扩展。所以aprogram实际上收到了论据:

sys.argv == ['aprogram', '-e', '1.wmv', '2.wmv', '3.wmv']

就像Charles所说的那样,你可以引用这个论点来让它按字面意思传递:

aprogram -e "*.wmv"

这将传入:

sys.argv == ['aprogram', '-e', '*.wmv']

答案 3 :(得分:0)

即使您阅读了一些标准(例如thisthis),也不是很明显。

命令行的 args 部分 - 几乎普遍 - 是输入文件。

只有非常罕见的奇数球情况,其中输入文件被指定为选项。确实发生了,但这种情况非常罕见。

此外,输出文件永远不会命名为 args 。它们几乎总是作为命名选项提供。

想法是

  1. 大多数程序都可以(并且应该)从stdin中读取。 -的命令行参数是“stdin”的代码。如果没有给出参数,则stdin是后备计划。

  2. 如果您的程序打开任何文件,它也可以在命令行上打开无限数量的文件。 shell通过扩展通配卡来促进这一点。 [但是,Windows不会为您执行此操作。]

  3. 如果没有明确的命令行选项(例如'-o somefile')来写入文件,程序就不应该覆盖文件。

  4. 请注意,cpmvrm是不遵循这些标准的程序的重要示例。