最近有个需求是对图片进行批量压缩存储在临时目录中,然后批量上传到oss上
# 遍历目录 将图片压缩到临时目录
for root, dir, files in os.walk(dirpath):
for file in files:
cmd = "convert -quality 50 %s %s" % (os.path.join(root, file), os.path.join(tmp_dir, file))
os.popen(cmd)
# 遍历临时目录 批量上传操作
for file in os.listdir(tmp_dir):
print(file)
打印dir的值发现,每次打印的文件数量不一致,找到半天没发现原因,最后猜测会不会是上面压缩图片的shell命令还没执行完毕,就继续执行后面的遍历操作导致这个问题,于是加了个延时操作time.sleep(1)
,发现代码正常了
可以看到os.popen执行shell时是没有阻塞的,可以考虑手动加阻塞或者使用
subprocess.call(cmd,shell=True)
# subprocess.call() 函数说明
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise