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


11

我有一个接受字符串参数的Python脚本。

$ python script.py "one image.jpg" "another image.jpg"

这按预期工作。

Python argparse: ["one image.jpg", "another image.jpg"]


如果我需要传递文件名,

$ python script.py $(ls "/some/dir/*.jpg")

Python argparse: ["one", "image.jpg", "another", "image.jpg"]

如果使用-Qof ls命令,我可以将结果用双引号引起来。但是,引号在Python脚本中即转义。

$ python script.py $(ls -Q "/some/dir/*.jpg")

Python argparse: ['"one image.jpg"', '"another image.jpg"']


如何将ls文件名扩展为适当的字符串以用作参数?(如我的第一个示例)


您应该引用shell扩展:"$(ls -Q '/some/dir/*.jpg')"。但是,答案给出了更好的选择。
巴库里

Answers:


23

不要解析ls。只需使用:

python script.py /path/to/*.jpg

这将执行Shell Globing,并替换/path/to/*.jpg为正确的列表。


5

我觉得上面的水珠答案是最好的,但xargsfind也可有时使用的解决方案。

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

之所以可行,是因为-print0on find会将输出用空字节而不是空格分开,并且-0xargs命令行上的on将假定输入用空字节分隔。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.