Python argv采用通配符路径

Python argv采用通配符路径,python,python-2.7,glob,Python,Python 2.7,Glob,我使用doc1/*.png作为第一个参数运行脚本,但它会转换为doc1/image1.png 如何让Python看到确切的参数 img_list = [] print sys.argv[1] x = sys.argv[1] img_list = [img for img in glob.glob(x)] 在大多数linux shell(bash,sh,fish,…)上,星号由shell处理。将*转换为文件列表的事实已经在shell级别完成了 如果你写: python file.py doc/*

我使用
doc1/*.png
作为第一个参数运行脚本,但它会转换为
doc1/image1.png

如何让Python看到确切的参数

img_list = []
print sys.argv[1]
x = sys.argv[1]
img_list = [img for img in glob.glob(x)]
在大多数linux shell(
bash
sh
fish
,…)上,星号由shell处理。将
*
转换为文件列表的事实已经在shell级别完成了

如果你写:

python file.py doc/*.png
shell本身
doc/*.png
转换为
“doc/1.png”“doc/2.png”
(因此它在
doc
目录中找到的
.png
文件列表)

您应该使用引号传递星号,如:

python file.py 'doc/*.png'

标准Windows shell不为文件名使用通配符。

正如@Jean-François Fabre sais所说,可以在Windows上使用glob模块使用通配符

import glob
paths = glob.glob('C:\path\with\wildcard.*')

这是在shell级别完成的。试着在Linux上引用:
“doc1/*.png”
如果arg在命令行中用单引号括起来,那么shell不应该扩展它。你在使用什么shell?ubuntu shell,它在windows中是一样的吗?当你说“ubuntu shell”时,我想你指的是Bash,因为这是Ubuntu和许多其他Linux发行版的标准shell,尤其是Debian家族的发行版。在windows上,情况并非如此,在windows上,你有完全相反的问题,你必须使用
glob.glob
@Jean Françoisfare:谢谢。我不使用windows,你看:)我更喜欢:)。