D:\extracodes\open-webui\backend\data/uploads/18a598c2-54cc-47f1-a7da-d3e1bfd830a2_1.doc 转换为 .docx 格式完成 CompletedProcess(args="soffice --headless --convert-to docx --outdir 'D:\\extracodes\\open-webui\\backend\\data/uploads' 'D:\\extracodes\\open-webui\\backend\\data/uploads/18a598c2-54cc-47f1-a7da-d3e1bfd830a2_1.doc'", returncode=0, stdout='', stderr='Error: source file could not be loaded\n') 这个文件D:\\extracodes\\open-webui\\backend\\data/uploads/18a598c2-54cc-47f1-a7da-d3e1bfd830a2_1.doc 实际是存在的, 问题出在哪里?
解决方案: 应该标准化路径, 不可以出现反斜杠这样的形式
如果换成
doc_file = "D:/extracodes/open-webui/backend/data/uploads/18a598c2-54cc-47f1-a7da-d3e1bfd830a2_1.doc" 这样的就可以正常解析了
核心代码就是替换成正常的路径:
# 标准化路径
input_path = os.path.abspath(doc_path).replace('\\', '/')
完整的代码示例如下
import os
import subprocess
import msvcrt
import tempfile
def convert_doc_to_docx_secure(doc_path):
# 标准化路径
input_path = os.path.abspath(doc_path).replace('\\', '/')
output_dir = os.path.dirname(input_path)
# 环境配置
with tempfile.TemporaryDirectory() as tmpdir:
os.environ['TMP'] = tmpdir
os.environ['TEMP'] = tmpdir
# 构建命令
cmd = [
'soffice',
'--headless',
'--nologo',
'--nodefault',
'--norestore',
'--convert-to', 'docx:MS Word 2007 XML',
'--outdir', output_dir,
input_path
]
# 执行转换
try:
result = subprocess.run(
cmd,
capture_output=True,
text=True,
check=True,
timeout=30 # 设置超时防止卡死
)
return True
except subprocess.CalledProcessError as e:
print(f"深度错误信息:\nSTDOUT: {e.stdout}\nSTDERR: {e.stderr}")
return False
# 使用示例
success = convert_doc_to_docx_secure(r'D:\extracodes\open-webui\backend\data\uploads\18a598c2-54cc-47f1-a7da-d3e1bfd830a2_1.doc')

2638

被折叠的 条评论
为什么被折叠?



