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

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

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

文件:

  • os.remove()
  • glob.glob()

最新更新