将 bash 文件列表传递给 python CLI 函数
Pass bash file list to python CLI function
我正在使用 python 的 argparse
为我的软件中的常用功能创建命令行绑定。更具体地说,我说的是 this function.
通常当我希望 CLI 函数获取 bash 中的输入列表时,我可以这样做:
whateverfunction DSC_4{322..399}*
这会将函数从 DSC_4322
到 DSC_4399
的所有值传递给任何后缀。现在,很明显,如果我只是传递一个带 argparse
的刺痛意味着在 python:
中抓取路径,这将不起作用
parser.add_argument("destination", help="Path to store files into (excluding alphanumeric storage directories)", type=str)
是否有任何优雅的方法允许 argparse
位置参数来处理路径和文件列表?
我唯一能想到的就是检测字符串中的赞誉并编写一个 python 脚本来为这样的输入生成一个列表 - 并为任何其他类型的输入执行树爬网.. .但我希望有更好的方法。
所以用一个简单的脚本来回应 sys.argv
1959:~/mypy$ python echoargv.py stack{342..344}*
['echoargv.py', 'stack34234965.py', 'stack34279750.py', 'stack34308904.py', 'stack34432056.py']
我得到一个文件名列表
parser.add_argument("filenames", nargs='*')
将生成一个 args
命名空间,例如:
Namepace(filenames=['echoargv.py', 'stack34234965.py', 'stack34279750.py', 'stack34308904.py', 'stack34432056.py'])
如果没有匹配项,我会得到一个列表,例如
python echoargv.py stack{23..24}*
['echoargv.py', 'stack23*', 'stack24*']
如果您想从 Python 脚本中生成文件列表,请考虑使用 glob.glob
。
In [137]: glob.glob('stack342*')
Out[137]: ['stack34234965.py', 'stack34279750.py']
(虽然它显然没有实现 {..}
语法。)
我正在使用 python 的 argparse
为我的软件中的常用功能创建命令行绑定。更具体地说,我说的是 this function.
通常当我希望 CLI 函数获取 bash 中的输入列表时,我可以这样做:
whateverfunction DSC_4{322..399}*
这会将函数从 DSC_4322
到 DSC_4399
的所有值传递给任何后缀。现在,很明显,如果我只是传递一个带 argparse
的刺痛意味着在 python:
parser.add_argument("destination", help="Path to store files into (excluding alphanumeric storage directories)", type=str)
是否有任何优雅的方法允许 argparse
位置参数来处理路径和文件列表?
我唯一能想到的就是检测字符串中的赞誉并编写一个 python 脚本来为这样的输入生成一个列表 - 并为任何其他类型的输入执行树爬网.. .但我希望有更好的方法。
所以用一个简单的脚本来回应 sys.argv
1959:~/mypy$ python echoargv.py stack{342..344}*
['echoargv.py', 'stack34234965.py', 'stack34279750.py', 'stack34308904.py', 'stack34432056.py']
我得到一个文件名列表
parser.add_argument("filenames", nargs='*')
将生成一个 args
命名空间,例如:
Namepace(filenames=['echoargv.py', 'stack34234965.py', 'stack34279750.py', 'stack34308904.py', 'stack34432056.py'])
如果没有匹配项,我会得到一个列表,例如
python echoargv.py stack{23..24}*
['echoargv.py', 'stack23*', 'stack24*']
如果您想从 Python 脚本中生成文件列表,请考虑使用 glob.glob
。
In [137]: glob.glob('stack342*')
Out[137]: ['stack34234965.py', 'stack34279750.py']
(虽然它显然没有实现 {..}
语法。)