如何传递带有空格作为参数的文件名?

如何传递带有空格作为参数的文件名?

我有一个接受字符串参数的 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"]

如果使用-Qofls命令,我可以将结果括在双引号中。但是,引号在 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

这是有效的,因为-print0onfind将用空字节而不是空格分隔输出,并且-0on xargs 命令行将假定输入由空字节分隔。

相关内容