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']