gpt4 book ai didi

python - 使用 python subprocess.call rm 目录下的所有文件

转载 作者:太空狗 更新时间:2023-10-30 02:10:06 25 4
gpt4 key购买 nike

我正在编写一个脚本,将文件移动到用户主文件夹中的 .trash 目录中。我想通过调用 rm -rf/home/user/.trash/* 使用 python 的 subprocess.call()

添加清空垃圾目录的功能
~$ 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/*'])

为什么?

最佳答案

不要掏钱。

这使用 glob.glob()识别要删除的文件,以及 shutil.rmtree()删除子目录。

#!/usr/bin/env python
import os, os.path
import glob
import shutil

def remove_thing(path):
if os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)

def empty_directory(path):
for i in glob.glob(os.path.join(path, '*')):
remove_thing(i)

empty_directory('trash')

示例:

$ tree trash/
trash/
├── aaa
├── bbb
├── ccc
├── ddd
└── sub
├── iii
└── jjj

1 directory, 6 files

$ ./go.py

$ tree trash/
trash/

0 directories, 0 files

关于python - 使用 python subprocess.call rm 目录下的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com