传递星号时的python行为

传递星号时的python行为,python,input,parameter-passing,Python,Input,Parameter Passing,我正在写一个小脚本,应该能够处理多个文件。所以我添加了文件可以用逗号分隔,然后进行arg.split(','),然后处理每个文件 现在我想添加星号作为输入,比如 python myPythonScript.py -i folder/* 如果我将参数打印到option-I,当我第一次访问它时,我是对的 folder/firstFileInFolder.txt 但是如果我用 python myPythonScript.py -i someFolder/someFile,folder/* 它很好

我正在写一个小脚本,应该能够处理多个文件。所以我添加了文件可以用逗号分隔,然后进行arg.split(','),然后处理每个文件

现在我想添加星号作为输入,比如

python myPythonScript.py -i folder/*
如果我将参数打印到option-I,当我第一次访问它时,我是对的

folder/firstFileInFolder.txt
但是如果我用

python myPythonScript.py -i someFolder/someFile,folder/*
它很好用。有人知道为什么python会这样吗?

试着运行这个脚本

import sys

for arg in sys.argv:
    print arg
python script.py*


您的shell在python看到星号之前展开星号。

如注释中所述,您的shell正在为非逗号分隔的大小写展开星号。如果您知道用户可能会像在第二个示例中那样指定一个星号作为文件名的一部分,那么您可以让Python使用该模块进行路径扩展

允许shell或Python进行星号扩展的代码可能如下所示:

import glob
file_list = []
for pattern in sys.argv[1:]:
    file_list.extend(glob.glob(pattern))

在您的情况下,使用逗号作为分隔符将阻止您将逗号用作文件名的一部分。

这不是python做的,而是您的shell。传递多个文件的标准方法是让shell将输入作为单独的参数传递。不要用逗号分隔。如果您正在迭代传递的文件的内容,Python
fileinput
模块可能会很有用。@nneonneo您在那里找到了我:)如何获得它展开的整个列表?现在我有了这个
elif opt='-I':all_documents=arg.split(',')
我可以让shell扩展逗号后面的输入吗?
import glob
file_list = []
for pattern in sys.argv[1:]:
    file_list.extend(glob.glob(pattern))