Python、optparse和文件掩码

Python、optparse和文件掩码,python,optparse,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_ar

结果是

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
当前文件夹中有视频[1-6].wmv。
问题是为什么视频变成视频1.wmv。我做错了什么?

Python与此无关——它是shell

召唤

它将传入该通配符

其他六个值作为参数传递,没有附加到
-i
,就像运行
python convert.py-i video\u 1 video\u 2 video\u 3 video\u 4 video\u 5 video\u 6
,而
-i
只附加到下一个参数


也就是说,最好的选择可能是从
args
读取输入文件名,而不是使用
选项。输入

打印出args,您将看到其他文件的去向


它们在argv中被转换为单独的参数,而optpass仅将第一个参数作为输入文件名选项的值。

这并不明显,即使您阅读了一些标准(如或)

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

只有极少数情况下,输入文件被指定为选项。确实发生过,但非常罕见

此外,输出文件从未命名为args。它们几乎总是作为命名选项提供的

这个想法是

  • 大多数程序都可以(也应该)从标准输入读取数据。
    -
    的命令行参数是“stdin”的代码。如果未给出任何参数,则stdin是备用计划

  • 如果您的程序打开任何文件,它也可以打开命令行上指定的无限数量的文件。shell通过扩展通配符为您提供便利。[不过,Windows不会为您这样做。]

  • 在没有明确的命令行选项的情况下,您的程序永远不应该覆盖文件,例如“-o somefile”来写入文件

  • 请注意,
    cp
    mv
    rm
    是不遵循这些标准的程序的重要示例。

    为了澄清:

    $ python convert.py -i 'video_*'
    
    在Linux shell上,所有通配符(*.wmv)都由shell展开。因此,
    a程序实际上收到了参数:

    aprogram -e *.wmv
    
    如前所述,你可以引用论点,让它通过字面上:

    sys.argv == ['aprogram', '-e', '1.wmv', '2.wmv', '3.wmv']
    
    这将传入:

    aprogram -e "*.wmv"
    

    虽然你的评论提供了信息,但它并没有完全回答问题。@David Locke:没错,我没有用“你做错了”这个词。这种方法与API的预期相差甚远,很难做出更全面的评论<代码>--
    是“逐字读取所有其他参数”的代码。它是
    -
    (一个单破折号,而不是双破折号),意思是stdin。
    aprogram -e "*.wmv"
    
    sys.argv == ['aprogram', '-e', '*.wmv']