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 个回答
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
。