我正在python3
使用call
库中的subprocess
制作脚本。我遇到的问题是这个命令find . -mtime +3 | xargs rm -rf
在放入终端时会完全正常,但是当我这样做时:
from subprocess import call
call(["find", ".", "-mtime", "+3", "|", "xargs", "rm", "-rf"])
我最终得到的错误看起来像这样:
find: paths must precede expression: |
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
1
我做错了什么?请帮忙: - )
答案 0 :(得分:3)
|
不是命令参数;它是用于将两个命令连接在一起的shell语法。
使用管道的最简单方法是将单个字符串传递给subprocess
并让shell解析它:
from subprocess import call
call("find . -mtime +3 | xargs rm -rf", shell=True)
在这种情况下,它很好用,因为命令行非常简单;什么都不需要引用。
您可以在Python中设置管道,但它不像单个|
字符那样简洁。
from subprocess import Popen, PIPE
p1 = Popen(["find", ".", "-mtime", "+3"], stdout=PIPE)
p2 = Popen(["xargs", "rm", "-rf"], stdin=p1.stdout)
p1.stdout.close()
p2.wait()
请参阅further reference的Python文档。