You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python subprocess调用find命令遇-regex报错求助

解决subprocess调用find命令的错误问题

我来帮你分析一下问题所在,你遇到的错误主要是两个细节没处理好:参数里的多余空格和不必要的引号。

错误原因拆解

  1. 参数前的多余空格:你写的" -regex"前面带了空格,这会让find把这个带空格的字符串当成一个要查找的文件名,而不是命令选项,所以才会报错find: -regex: No such file or directory(这里的-regex其实是带前导空格的参数,find找不到这个文件)。
  2. 不必要的引号:在subprocess的列表参数模式下,每个元素都会被直接作为独立参数传给find,不需要给正则表达式加双引号。你加了'".*\.odt"',会让find把带引号的字符串当成正则的一部分,同时还会尝试把它当作文件名查找,于是出现find: ".*level2\.odt": No such file or directory的错误。

正确的代码写法

把参数里的多余空格去掉,同时去掉正则表达式的引号,另外注意Python字符串里的反斜杠需要转义(或者用原始字符串):

import subprocess

# 使用普通字符串,注意转义反斜杠
subprocess.run(["find", dirPath, "-regex", ".*\\.odt", "-type", "f", "-maxdepth", "1"])

# 或者用原始字符串,更简洁
subprocess.run(["find", dirPath, "-regex", r".*\.odt", "-type", "f", "-maxdepth", "1"])

额外说明

如果你的场景允许使用shell=True(注意如果dirPath包含特殊字符可能有安全风险),也可以直接写完整的命令字符串:

subprocess.run(f"find {dirPath} -regex '.*\\.odt' -type f -maxdepth 1", shell=True)

不过更推荐用列表参数的方式,因为它避免了shell注入的风险,也不需要处理复杂的字符串转义问题。

内容的提问来源于stack exchange,提问作者Lone Ronin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:08