python - 如何在 python 脚本内的子进程中使用 * ?

标签 python bash python-2.7

我试图删除我用Python 2.7编写的一些代码中的大量文件夹,要删除的文件夹与我正在运行的代码位于同一文件夹中。为此,我按以下方式使用子流程:

import subprocess


def runsafe(job,args):
    jobs=[job];
    for arg in args:
        jobs.append(arg)
    proc=subprocess.Popen(jobs,stdout=subprocess.PIPE)
    return proc.stdout.readlines()


if __name__=="__main__":
    runsafe("rm",["-r","./*/"])

如果我这样做,代码不会删除任何文件夹。显然,如果我写rm -r ./*/在我的终端中,运行代码的文件夹内的所有文件夹都被删除。另外如果我改变runsafe("rm",["-r","./*/"])在我的代码中 runsafe("rm",["-r","./foo/"]) (其中 foo 是要删除的文件夹之一)代码工作正常并删除所需的文件夹。

如何一次删除所有文件夹?为什么我用*表示要删除所有文件夹却不起作用?

最佳答案

您不能使用*,因为subprocess不在shell(例如Bash)中运行,并且它是扩展*的shell 到文件列表中。

可以使用shell=True告诉subprocess在shell中运行,但是这个isn't a great idea ,并且还有更好的选择。

如果您需要recursively delete a directory您可以使用shutil.rmtree()并完全避免启动子进程。

关于python - 如何在 python 脚本内的子进程中使用 * ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580188/

相关文章:

python - TypeError:buf不是数字元组

python - 否则缩进错误: unexpected unindent in PyCharm

python - Discord.py 模块 Python 3.6.4 踢功能

bash - 如何为包括 sudo 在内的用户启用系统范围的功能?

regex - Grep:无效的重复计数

linux - 我可以运行使用 2 个不同命令行的脚本吗?

python - 在子类python中调用基类方法

python - 在终端中终止 Python(control-C 仅打印 ^C)macOS 10.12

python - Google App Engine Python - Protorpc && 任务队列

Python mysql.connector 连接到特定目录 xampp 中的数据库