python子流程中带有exec的find命令出现错误

python子流程中带有exec的find命令出现错误,python,find,subprocess,Python,Find,Subprocess,我正在尝试使用子流程模块(python)执行以下命令 我猜这与转义某些角色有关。但不知道如何克服这一点 感谢您的帮助。谢谢。记住转义“是必需的,而且在之前使用的转义\;也是必需的 您的命令可能类似于: p1 = subprocess.Popen(["/usr/bin/find", "<filepath> -maxdepth 1 -type f -iname \"<pattern>\" -exec basename {} \\;"]) p1.communicate() p

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

我猜这与转义某些角色有关。但不知道如何克服这一点

感谢您的帮助。谢谢。

记住转义
是必需的,而且在
之前使用的转义
\
也是必需的

您的命令可能类似于:

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

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

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

提供更好的可读性。

另一个问题的答案有助于:

我不明白的是分号不需要转义,因为通常分号是由bash解释的,需要转义

在bash中,此等效项为:

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

如果OP使用单引号(
),请提供启动子流程的代码行对于字符串,不需要转义双引号。谢谢。整个命令字符串的单引号起作用。即使您成功了,您能否提供原始代码@shruthi?以及如何修复它?还要注意:这实际上不起作用。它将解释整个第二个参数(从到\\;)作为道路,这不是你所期望的,或想要的。
r'... -exec basename {} \;'
import subprocess

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