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

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

如果使用-Q of ls命令,我可以在双引号之间包装结果。 但是,引号在Python脚本中保持转义,即。

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

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


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

不要解析ls 。 只需使用:

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

这将执行shell globbing,用适当的列表替换/path/to/*.jpg

我认为上面的glob回答是最好的,但是xargsfind也是一种有时可以使用的解决方案。

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

这是因为-print0上的-print0将输出与空字节而不是空格分开,而xargs命令行上的-0将假定输入由空字节分隔。