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

时间:2012-03-21 06:26:11

标签: python find subprocess

我正在尝试使用子进程模块(python)

执行以下命令
/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \;

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

/usr/bin/find: missing argument to `-exec'

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

感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:10)

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

import subprocess

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

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

在bash中,这种平等是:

find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;

答案 1 :(得分:0)

还有一个提示:使用语法r'bla'允许使用反斜杠而不必引用它们:

r'... -exec basename {} \;'

提供更好的可读性。

答案 2 :(得分:-2)

请记住,必须转义",并且还需要在\之前使用;转义

您的命令可能类似于:

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