如何传递带空格作为参数的文件名?
我有一个接受字符串参数的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回答是最好的,但是xargs
和find
也是一种有时可以使用的解决方案。
find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py
这是因为-print0
上的-print0
将输出与空字节而不是空格分开,而xargs命令行上的-0
将假定输入由空字节分隔。