使用 flask 控制 libreoffice 同时转换多个 docx 文件出错

新手上路,请多包涵

现在在开发一个网站,获取客户表单上传的docx文件,然后通过libreoffice转换成pdf。
现在测试发现如果多个用户同时上传文件,libreoffice可以正常转换(在后台已经看到转换后的pdf文件),但是总有一个或几个用户返回FileNotFoundError: [Errno 2] No such file or directory错误,使用redis做消息队列仍然不能解决,求教原因?

相关代码如下:

upload_path = os.path.join(parentdir, 'static/Upload_Files/BeforeSwitchFile/', new_filename)
print_file.save(upload_path)
           
# 将数据添加到列表中
switch = q.enqueue_call(switch_topdf(upload_path))
if switch.func_name == 'success':
    i = new_filename.rindex('.')
    new_filename = new_filename[:i] + '.pdf'
    switched_dir = os.path.join(parentdir, 'static/Upload_Files',
         secure_filename(new_filename))  # 转换pdf后的文件路径
    # 读取文件页数
    pageCount = read_pdf_pages(switched_dir)
    cost = pageCount * print_cost +0.2

switch_topdf函数代码

def switch_topdf(filename):

    cmd = "soffice --headless --convert-to pdf:writer_pdf_Export {} --outdir {}".format(filename, FileSaveDir)  # libreoffice转换命令
    print(cmd)
    try:
        returnCode = subprocess.call(cmd, shell=True)
        # returnCode = os.system(cmd)
        if returnCode != 0:
            raise IOError("{} failed to switch".format(filename))
    except Exception:
        return 'error'
    else:
        return 'success'
阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题