在python子进程中使用exec查找命令会产生错误

shr*_*thi 3 python subprocess find

我正在尝试使用子进程模块(python)执行以下命令

/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)

但是,它会出现以下错误:

/usr/bin/find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)

我猜它与逃避一些角色有关.但没有得到如何克服这一点.

任何帮助表示赞赏.谢谢.

isa*_*clw 11

另一个问题的答案有所帮助:https: //stackoverflow.com/a/15035344/971529

import subprocess

subprocess.Popen(('find', '/tmp/mount', '-type', 'f',
              '-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';'))
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是,分号不需要被转义,因为通常分号由bash解释,并且需要被转义.

在bash中,这种平等是:

find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

  • 这适合我.重点是 ';' 选项. (2认同)

ava*_*sal -2

记住转义是必需的,之前使用过的"转义也是必需的\;

你的命令可能类似于:

p1 = subprocess.Popen(["/usr/bin/find", "<filepath> -maxdepth 1 -type f -iname \"<pattern>\" -exec basename {} \\;"])
p1.communicate()
Run Code Online (Sandbox Code Playgroud)