使用 docopt 将 'find' 命令的输出传递给 Python(空格问题)
Pass output of 'find' command to Python with docopt (issue with spaces)
考虑这个简单的 Python 命令行脚本:
"""foobar
Description
Usage:
foobar [options] <files>...
Arguments:
<files> List of files.
Options:
-h, --help Show help.
--version Show version.
"""
import docopt
args = docopt.docopt(__doc__)
print(args['<files>'])
考虑到我的文件夹中有以下文件:
file1.pdf
file 2.pdf
现在我想将 find
命令的输出传递给我的简单命令行脚本。但是当我尝试
foobar `find . -iname '*.pdf'`
我没有得到我想要的文件列表,因为输入被空格分开了。 IE。我得到:
['./file', '2.pdf', './file1.pdf']
如何正确执行此操作?
这不是 Python 问题。这就是 shell 如何标记命令行。空格用于分隔命令参数,这就是为什么 file 2.pdf
显示为两个单独的参数。
您可以组合 find
和 xargs
来执行您想要的操作:
find . -iname '*.pdf' -print0 | xargs -0 foobar
find 的 -print0
参数告诉它输出由 ASCII NUL 字符而不是空格分隔的文件名,而 xargs
的 -0
参数告诉它期望这种输入形式. xargs
然后用正确的参数调用你的 foobar
脚本。
比较:
$ ./foobar $(find . -iname '*.pdf' )
['./file', '2.pdf', './file1.pdf']
收件人:
$ find . -iname '*.pdf' -print0 | xargs -0 ./foobar
['./file 2.pdf', './file1.pdf']
考虑这个简单的 Python 命令行脚本:
"""foobar
Description
Usage:
foobar [options] <files>...
Arguments:
<files> List of files.
Options:
-h, --help Show help.
--version Show version.
"""
import docopt
args = docopt.docopt(__doc__)
print(args['<files>'])
考虑到我的文件夹中有以下文件:
file1.pdf
file 2.pdf
现在我想将 find
命令的输出传递给我的简单命令行脚本。但是当我尝试
foobar `find . -iname '*.pdf'`
我没有得到我想要的文件列表,因为输入被空格分开了。 IE。我得到:
['./file', '2.pdf', './file1.pdf']
如何正确执行此操作?
这不是 Python 问题。这就是 shell 如何标记命令行。空格用于分隔命令参数,这就是为什么 file 2.pdf
显示为两个单独的参数。
您可以组合 find
和 xargs
来执行您想要的操作:
find . -iname '*.pdf' -print0 | xargs -0 foobar
find 的 -print0
参数告诉它输出由 ASCII NUL 字符而不是空格分隔的文件名,而 xargs
的 -0
参数告诉它期望这种输入形式. xargs
然后用正确的参数调用你的 foobar
脚本。
比较:
$ ./foobar $(find . -iname '*.pdf' )
['./file', '2.pdf', './file1.pdf']
收件人:
$ find . -iname '*.pdf' -print0 | xargs -0 ./foobar
['./file 2.pdf', './file1.pdf']