【问题标题】:find command with exec in python subprocess gives error在 python 子进程中使用 exec 查找命令给出错误
【发布时间】:2012-03-21 06:26:10
【问题描述】:

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

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

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

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

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

感谢任何帮助。谢谢。

【问题讨论】:

  • 请提供您启动子进程的代码行

标签: python find subprocess


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    提供更好的可读性。

    【讨论】:

      【解决方案3】:

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

      您的命令可能类似于:

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

      【讨论】:

      • 如果 OP 使用单引号 (') 作为字符串,则无需转义双引号。
      • 谢谢。整个命令字符串周围的单引号有效。
      • 即使你成功了,你能提供原始代码@shruthi吗?你是怎么解决的?
      • 另请注意:这实际上不起作用。它会将整个第二个参数(从 到 \\;)解释为路径,这不是您所期望或想要的。
      猜你喜欢
      • 2021-07-28
      • 2014-10-20
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2013-02-10
      • 2011-07-04
      相关资源
      最近更新 更多