python 踩坑记录

最近有个需求是对图片进行批量压缩存储在临时目录中,然后批量上传到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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:赵丽娟 公司:丛迪服装有限公司 【日精进打卡第91天】 【知~学习】 《六项精进》大纲2遍,共212遍; 《...
    阿诗玛_6209阅读 93评论 0 0
  • 前言:《毕业那年遇见的他》讲述了一个年轻善良的江南女孩。怀着对前途的无限憧憬走进社会,不想刚离开校园便遭遇了一段刻...
    悠梦金陵阅读 351评论 0 0