Python、optparse 和文件掩码

3 投票
4 回答
2751 浏览
提问于 2025-04-11 17:51
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 个回答

1

为了更清楚地说明:

aprogram -e *.wmv

在Linux的命令行中,所有的通配符(比如*.wmv)都会被命令行自动处理。所以,实际上aprogram接收到的参数是:

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

就像Charles说的那样,你可以把参数用引号括起来,这样就能原样传递进去了:

aprogram -e "*.wmv"

这样传入的将是:

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

打印出参数,你就能看到其他文件是怎么处理的...

这些文件被转换成了argv中的独立参数,而optparse只把第一个当作input_filename选项的值。

8

Python在这里没什么关系,问题出在命令行工具上。

你可以调用

$ python convert.py -i 'video_*'

这样就会把那个通配符传进去。

另外六个值是作为参数传入的,而不是和 -i 绑定在一起,就像你运行 python convert.py -i video_1 video_2 video_3 video_4 video_5 video_6 一样,-i 只会和它后面紧跟的一个参数关联。

所以,最好的办法可能是直接从 args 中读取你的输入文件名,而不是使用 options.input

撰写回答