aut*_*run 11 python command-line bash
我有一个接受字符串参数的 Python 脚本。
$ python script.py "one image.jpg" "another image.jpg"
Run Code Online (Sandbox Code Playgroud)
这按预期工作。
Python argparse: ["one image.jpg", "another image.jpg"]
如果我需要传递文件名,我会这样做,
$ python script.py $(ls "/some/dir/*.jpg")
Run Code Online (Sandbox Code Playgroud)
Python argparse: ["one", "image.jpg", "another", "image.jpg"]
如果使用-Qofls命令,我可以将结果用双引号括起来。但是,引号在 Python 脚本中保持转义,即。
$ python script.py $(ls -Q "/some/dir/*.jpg")
Run Code Online (Sandbox Code Playgroud)
Python argparse: ['"one image.jpg"', '"another image.jpg"']
我应该如何将ls文件名扩展为适当的字符串以用作参数?(就像在我的第一个例子中一样)
小智 23
不要解析ls。只需使用:
python script.py /path/to/*.jpg
Run Code Online (Sandbox Code Playgroud)
这将执行/path/to/*.jpg由正确列表替换的shell globbing 。
小智 6
我觉得上面的水珠答案是最好的,但xargs并find也可有时使用的解决方案。
find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为-print0onfind将使用空字节而不是空格分隔输出,并且-0xargs 命令行上的 将假定输入由空字节分隔。