Python:glob只返回路径模式的一个结果

Python:glob只返回路径模式的一个结果,python,glob,Python,Glob,蟒蛇编码: glob.glob中名称的(第一个参数): 印刷品(名称) 狂欢节: $ls >a.txt b.txt c.txt program.py >$./program.py*.txt >a.txt 不知何故,glob识别出了该模式,但只会找到一个匹配项。 然而,如果我写: $./program.py“*.txt” >a.txt >b.txt >c.txt 我不明白。试图在文档中找到答案,但无法管理。有人知道为什么吗?谢谢当您在bash中运行/program.py*.txt时,它会自动

蟒蛇编码:

glob.glob中名称的
(第一个参数):
印刷品(名称)
狂欢节:

$ls
>a.txt b.txt c.txt program.py
>$./program.py*.txt
>a.txt
不知何故,glob识别出了该模式,但只会找到一个匹配项。 然而,如果我写:

$./program.py“*.txt”
>a.txt
>b.txt
>c.txt

我不明白。试图在文档中找到答案,但无法管理。有人知道为什么吗?谢谢

当您在bash中运行
/program.py*.txt
时,它会自动将
*.txt
扩展到
a.txt b.txt c.txt program.py

然后将它们全部传递给程序,并仅在第一个参数
a.txt上运行glob


在bash中运行
/program.py*.txt
时,当您在其周围添加
时,实际上会将
*.txt
作为参数传递给glob

当您运行
/program.py*.txt
时,它会自动将
*.txt
扩展为
a.txt b.txt c.txt program.py

然后将它们全部传递给程序,并仅在第一个参数
a.txt上运行glob


在第一种情况下,当您在其周围添加
时,实际上会将
*.txt
作为参数传递给glob

,shell会展开通配符并将所有4个文件传递给您的代码。换句话说,
sys.argv
的长度是4。当您使用
第一个参数
时,您实际上是
glob
ing
a.txt
,因此是结果。但是,在第二种情况下不会进行shell扩展,而是按原样传递
*.txt
,然后由
glob
处理。在第一种情况下,shell扩展通配符并将所有4个文件传递给您的代码。换句话说,
sys.argv
的长度是4。当您使用
第一个参数
时,您实际上是
glob
ing
a.txt
,因此是结果。但是,在第二种情况下不会进行shell扩展,
*.txt
按原样传递,然后由
glob
处理。谢谢。任何关于如何防止bash干扰给定参数的想法。我希望程序能够准确地显示用户在没有“@Snusifer谢谢。你知道如何防止bash干扰给定的参数吗?我希望程序能够准确地显示用户在没有“@Snusifer”的情况下所写的内容