I currently have a script, which uses file globbing via the sys.argv variable like this:
if len(sys.argv) > 1:
for filename in sys.argv[1:]:
This works great for processing a bunch of files; however, I would like to use this with the argparse module as well. So, I would like my program to be able to handle something like the following:
foo@bar:~$ myScript.py --filter=xyz *.avi
Has anyone tried to do this, or have some pointers on how to proceed?
解决方案
If I got you correctly, your question is about passing a list of files together with a few flag or optional parameters to the command. If I got you right, then you just must leverage the argument settings in argparse:
File 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)
The commented line above inform the parser to expect an undefined number >= 0 (nargs ='*') of positional arguments.
Running the script from the command line gives these outputs:
$ ./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
[]
Observe how the files will be in a list regardless of them being several or just one.
HTH!