我目前有一个脚本,它通过 sys.argv
变量使用文件 globbing,如下所示:
if len(sys.argv) > 1:
for filename in sys.argv[1:]:
这非常适合处理一堆文件;但是,我也想将它与 argparse
模块一起使用。所以,我希望我的程序能够处理如下内容:
foo@bar:~$ myScript.py --filter=xyz *.avi
有没有人试过这样做,或者对如何进行有一些指示?
最佳答案
如果我没听错,您的问题是将文件列表连同一些标志或可选参数传递给命令。如果我没看错,那么您只需要利用 argparse 中的参数设置:
文件p.py
import argparse
parser = argparse.ArgumentParser(description='SO test.')
parser.add_argument('--doh', action='store_true')
parser.add_argument('files', nargs='*') # This is it!!
args = parser.parse_args()
print(args.doh)
print(args.files)
上面的注释行通知解析器期望一个未定义的数字 >= 0 (nargs ='*'
) 的位置参数。
从命令行运行脚本会得到这些输出:
$ ./p.py --doh *.py
True
['p2.py', 'p.py']
$ ./p.py *.py
False
['p2.py', 'p.py']
$ ./p.py p.py
False
['p.py']
$ ./p.py
False
[]
观察文件在列表中的排列方式,无论它们是多个文件还是一个文件。
喂!
关于python - 在 Python 中结合使用 argparse 和 sys.argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423895/