2024-10-02 16:32:02 发布
网友
我试图在Popen中运行BASH命令:
find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;
但每次我得到: “find:stderr中缺少'-exec'\n”“的参数。”。在
python的等价物是什么?在
我天真的建议是:
当然有更好的,更像Python的方式来做这件事吗?在
这里实际上有两个问题-第一,为什么你的Popen构造不起作用,第二,如何正确使用os.walk。内德回答了第二个问题,所以我将讨论第一个问题:你需要注意外壳逃逸。\;是转义的;,因为通常情况下,;会被Bash解释为分隔两个shell命令,并且不会传递给{}。(在其他一些shell中,{}也必须转义。)
Popen
os.walk
\;
;
{}
但是对于Popen,如果可以避免的话,通常不希望使用shell。所以,这应该有效:
import subprocess subprocess.Popen(('find', '/tmp/mount', '-type', 'f', '-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';'))
如果你发现自己经常这样做。这可能是一个有用的包装手术室步行公司名称:
def files(dir): # note you have subdirs and files flipped in your code for root,subdirs,files in os.walk(dir): for file in files: yield os.path.join(root,file)
要删除目录中具有特定扩展名的文件,请执行以下操作:
你所拥有的基本上就是这样做的。你要协调三件事:1)遍历树,2)只操作.rpmsave文件,3)删除这些文件。你在哪里能找到一种不需要解释就可以实现所有这些功能的东西呢?Bash命令和Python代码的复杂性大致相同,这并不奇怪。在
但是你必须修改你的代码,像这样:
for root,files,subdirs in os.walk('/tmp/mount'): for file in files: if file.endswith('.rpmsave'): os.remove(os.path.join(root, file))
这里实际上有两个问题-第一,为什么你的}。(在其他一些shell中,
Popen
构造不起作用,第二,如何正确使用os.walk
。内德回答了第二个问题,所以我将讨论第一个问题:你需要注意外壳逃逸。\;
是转义的;
,因为通常情况下,;
会被Bash解释为分隔两个shell命令,并且不会传递给{{}
也必须转义。)但是对于
Popen
,如果可以避免的话,通常不希望使用shell。所以,这应该有效:如果你发现自己经常这样做。这可能是一个有用的包装手术室步行公司名称:
要删除目录中具有特定扩展名的文件,请执行以下操作:
^{pr2}$你所拥有的基本上就是这样做的。你要协调三件事:1)遍历树,2)只操作.rpmsave文件,3)删除这些文件。你在哪里能找到一种不需要解释就可以实现所有这些功能的东西呢?Bash命令和Python代码的复杂性大致相同,这并不奇怪。在
但是你必须修改你的代码,像这样:
相关问题 更多 >
编程相关推荐