我有一个接受字符串参数的 Python 脚本。
$ python script.py "one image.jpg" "another image.jpg"
一切按预期进行。
Python 参数解析:["one image.jpg", "another image.jpg"]
如果我需要传递文件名,我会这样做,
$ python script.py $(ls "/some/dir/*.jpg")
Python 参数解析:["one", "image.jpg", "another", "image.jpg"]
如果使用-Q
ofls
命令,我可以将结果括在双引号中。但是,引号在 Python 脚本中保持转义,即。
$ python script.py $(ls -Q "/some/dir/*.jpg")
Python 参数解析:['"one image.jpg"', '"another image.jpg"']
我应该如何将ls
文件名扩展为适当的字符串以用作参数?(如我的第一个例子一样)
答案1
不要解析ls
。只需使用:
python script.py /path/to/*.jpg
这将执行 shell 通配符,并/path/to/*.jpg
用适当的列表进行替换。
答案2
我认为上面的 glob 答案是最好的,但xargs
也是find
有时可以使用的解决方案。
find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py
这是有效的,因为-print0
onfind
将用空字节而不是空格分隔输出,并且-0
on xargs 命令行将假定输入由空字节分隔。