python子流程通配符是仅用于选择的第一个文件

2024-10-03 13:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除以下所有文件:

20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_08
20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_04  20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_09
20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_05  20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_10

在Linux中,我只需执行以下操作:

rm 20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_*

但是当我使用python脚本做同样的事情时。它只是删除与模式匹配的第一个文件,但不是全部文件:

temp = subprocess.Popen('rm 20200922_051424_00011_v4wzh_db508ed0-b8b9-488b-a796-773d1fb4045c_*', shell=True, stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE)

有人能告诉我它不起作用的原因吗?我该怎么办

完整的python函数是:

def remove(filename):
    try:
        cmd = 'rm ' + filename
        print(cmd)
        temp = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE)
        stdout, stderr = temp.communicate()
        if stderr:
            print('Error while running rm command.')
        print("Result of running rm command: ", stdout)
    except CalledProcessError as e:
        pass

Tags: 文件rmcmdstderrstdoutshelltempsubprocess
1条回答
网友
1楼 · 发布于 2024-10-03 13:26:35

既然您使用的是python,为什么不直接从python中删除它们,而不是调用shell命令呢

for filename in glob.glob(pattern):
  os.remove(filename)

文件:

相关问题 更多 >