Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子进程调用在使用find时抛出错误_Python_Bash_Python 3.x_Find_Subprocess - Fatal编程技术网

Python子进程调用在使用find时抛出错误

Python子进程调用在使用find时抛出错误,python,bash,python-3.x,find,subprocess,Python,Bash,Python 3.x,Find,Subprocess,我正在使用子流程库中的调用在python3中制作脚本。我遇到的问题是,这个命令find-mtime+3 | xargs rm-rf在放入终端时可以正常工作,但当我这样做时: 来自子流程导入调用 调用([“查找”、“,-mtime”、“+3”、“|”、“xargs”、“rm”、“-rf”]) 我最终得到了一个类似以下内容的错误: find:路径必须位于表达式之前:| 用法:find[-H][L][P][Olevel][D help | tree | search | stat | rates |

我正在使用
子流程
库中的
调用
python3
中制作脚本。我遇到的问题是,这个命令
find-mtime+3 | xargs rm-rf
在放入终端时可以正常工作,但当我这样做时:

来自子流程导入调用
调用([“查找”、“,-mtime”、“+3”、“|”、“xargs”、“rm”、“-rf”])
我最终得到了一个类似以下内容的错误:

find:路径必须位于表达式之前:|
用法:find[-H][L][P][Olevel][D help | tree | search | stat | rates | opt | exec | time][path…][expression]
1.

我做错了什么?请帮助:-)

|
不是命令参数;它是将两个命令连接在一起的shell语法

使用管道的最简单方法是将单个字符串传递给
子流程
,并让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()

请参阅Python文档以了解。

不是开玩笑吧?如果您确实在shell中运行了这个命令,您就不会有3天前的文件来测试python脚本。小心不要尝试这个!如果你想递归删除3天前修改过的所有文件和目录,它甚至不会提示。您应该将示例更改为
grep | sort
或甚至
grep | kill
示例。这个太具破坏性了。