【发布时间】:2015-08-13 00:58:53
【问题描述】:
我正在编写一个脚本,它将文件移动到用户主文件夹中的 .trash 目录中。我想通过使用 python 的 subprocess.call() 调用 rm -rf /home/user/.trash/* 添加清空垃圾目录的功能
~$ touch file1
~$ trash file1
['mv', 'file1', '/home/rodney/.trash/']
~$ ls .trash
file1
~$ trash --empty
['rm', '-rf', '/home/rodney/.trash/*']
~$ ls .trash
file1
如您所见,rm 命令并未删除垃圾箱中的内容。但是,如果我直接在命令行上执行命令,它就可以工作。
~$ rm -rf /home/rodney/.trash/*
~$ ls .trash
~$
输出来自以下代码
print(cmd)
subprocess.call(cmd)
奇怪的是,如果我从 cmd 列表的最后一个参数中排除 *,那么子进程调用会起作用,但也会删除整个 .trash 目录。我不想删除 .trash 目录;只有它下面的所有东西。
总结问题
这行得通
import subprocess
subprocess.call(['rm', '-rf', '/home/rodney/.trash/'])
这不是
import subprocess
subprocess.call(['rm', '-rf', '/home/rodney/.trash/*'])
为什么?
【问题讨论】:
-
你为什么要找
rm做一些简单的事情,比如在python中删除文件? -
我认为写起来比创建文件列表和遍历所有子目录要快。
-
也许吧,但从长远来看,学习 Python 必须提供的 API 会让您受益更多。见my answer。否则,您不妨将其编写为 Bash 脚本。
-
请注意,
*不会匹配以点开头的文件。
标签: python python-3.x subprocess python-3.4 rm