我正在尝试在 Popen 中运行此 BASH 命令:
find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;
但每次我得到:
“查找:stderr 中缺少 `-exec'\n 的参数”。
与此等效的 python 是什么?
我天真的做法是:
for (root,files,subdirs) in os.walk('/tmp/mount'):
for file in files:
if '.rpmsave' in file:
os.remove(file)
肯定有更好、更Pythonic的方法来做到这一点吗?
您实际上有两个问题 - 首先,为什么您的Popen
构建不行,二、如何使用os.walk
适当地。内德回答了第二个问题,所以我将解决第一个问题:您需要注意 shell 转义。这\;
是一个逃脱的;
因为通常;
会被 Bash 解释为分隔两个 shell 命令,并且不会传递给find
。 (在其他一些 shell 中,{}
也必须逃脱。)
但与Popen
如果可以避免的话,您通常不想使用 shell。所以,这应该有效:
import subprocess
subprocess.Popen(('find', '/tmp/mount', '-type', 'f',
'-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)