Python-使用Popen执行具有多个条件的查找

arm*_*ino 5 python subprocess popen

我想find在多个条件下执行,例如:查找foo,排除隐藏文件:

find . -type f \( -iname '*foo*' ! -name '.*' \)
Run Code Online (Sandbox Code Playgroud)

Python代码:

import subprocess

cmd = ["find", ".", "-type", "f", "(", "-iname", "*foo*", "!", "-name", ".*", ")"]
sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print sp.communicate()[0].split()
Run Code Online (Sandbox Code Playgroud)

有人可以解释我所缺少的吗?谢谢!

VB9*_*NIC -1

至少,需要转义那里的*。

第二,通过反斜杠转义 ( 和 ) (将“\\(”和“\\)”传递给 shell)

cmd = ["find", ".", "-type", "f", "\\(", "-iname", "\\*foo\\*", "!", "-name", ".\\*", "\\)"]
Run Code Online (Sandbox Code Playgroud)

或者甚至只是摆脱那些(和) -

cmd = ["find", ".", "-type", "f", "-iname", "\\*foo\\*", "!", "-name", ".\\*"]
Run Code Online (Sandbox Code Playgroud)

应该可以正常工作