test.py代码有什么问题?
$ ls *csv
test1.csv test2.csv test3.csv test4.csv
$ python test.py *csv
test1.csv
$ python test.py '*csv'
test1.csv
test2.csv
test3.csv
test4.csv
$ cat test.py
#!/usr/bin/python
import sys,glob
for filename in glob.glob(sys.argv[1]):
print filename
$
最终我不想被迫用引号将参数传递给脚本。
编辑:在对已接受的答案发表评论后发现问题
如果shell扩展有效,我不必使用glob,所以循环是:
for filename in sys.argv[1:]:
print filename
谢谢!
答案 0 :(得分:3)
这不是glob
或Python特有的,它只是通配符在shell中的工作方式。您可以通过将脚本替换为刚刚执行的脚本来查看此内容:
import sys
print sys.argv
在第一个示例中,在脚本运行之前,shell将*.csv
扩展为多个文件名。你可以通过打印sys.argv
看到这一点 - 所有匹配的文件名都在那里。
如果您不希望shell扩展通配符,则需要使用\
引用或转义它们。 (这里有一个例子 - 如果没有匹配的文件,bash会将*.csv
传递给你的脚本。默认情况下,zsh会发出错误信号。)
显然,您可以使用以下命令关闭shell中的glob扩展:
set -f
但我认为这不是你想要的。
有关扩展here的大量信息。