在python子进程中使用exec查找命令

2024-06-16 18:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \;

但是,它给出了以下错误:

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

我猜这是为了逃避一些角色。但不知道如何克服。

如有任何帮助,我们将不胜感激。谢谢。


Tags: 模块命令binusrtype错误流程find
3条回答

记住,需要转义",还需要在;之前使用转义\

您的命令可能类似于:

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

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

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

提供更好的可读性。

对另一个问题的回答有助于: 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 {} \;

相关问题 更多 >