Python:子进程调用无法识别 * 通配符?

标签 python linux shell subprocess

我想删除文件中的所有 *.ts。但是 os.remove 不起作用。

>>> args = ['rm', '*.ts']
>>> p = subprocess.call(args)
rm: *.ts No such file or directory

最佳答案

rm 程序采用文件名列表,但 *.ts 不是文件名列表,它是匹配文件名的模式。您必须为 rm 命名实际文件。当您使用 shell 时,shell(但不是 rm!)将为您扩展像 *.ts 这样的模式。在 Python 中,您必须明确要求它。

import glob
import subprocess
subprocess.check_call(['rm', '--'] + glob.glob('*.ts'))
#                            ^^^^ this makes things much safer, by the way

当然,为什么要为 subprocess 烦恼呢?

import glob
import os
for path in glob.glob('*.ts'):
    os.remove(path)

关于Python:子进程调用无法识别 * 通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758830/

相关文章:

linux - 将确切的异常写入日志文件

python /Matplotlib : controlling the aspect ratio in gridspec

c - 决定必须由 super 用户调用 setgroups() 和 initgroups() 的机制是什么?

javascript - Python selenium 网页抓取 - 卡住页面

linux - Apache 将 2 个文件夹重定向到另一个文件夹或网络共享

macos - 在 Mac OS X shell 脚本中从开始日期循环到结束日期

linux - 在 bash 脚本中使用 grep 命令将变量值传递给 --include 参数

bash - Ansible - 高级shell命令执行格式

python - (初学者问题)为什么我的格式化字符串不能正常工作?

python - 在 matplotlib 子图中显示 LineCollections