Python调用Docker运行pdf2htmlex遇FileNotFoundError求助
问题分析与解决
你的Python脚本调用Docker命令时出现FileNotFoundError,主要是以下几个错误导致的:
- subprocess参数格式错误:当
shell=False时,subprocess.call()要求传入命令参数列表而非拼接后的完整字符串。直接传拼接字符串会被当作单个可执行文件路径,系统自然找不到对应的文件。 - 命令拼接缺少空格:
text + filename会把命令末尾和文件名直接连在一起,生成...--zoom 1.3test4.pdf这种无效命令。 - Docker参数冗余:
-ti是交互式终端参数,脚本非交互式场景下不需要,反而会引发异常。 - import语句位置不规范:
import subprocess放在函数内部不符合Python编码规范,建议移至文件顶部。
修正后的代码
import subprocess def pdf2html(path, filename): # 将命令拆分为参数列表,避免解析错误,同时规避shell=True的安全风险 cmd = [ "docker", "run", "--rm", "--mount", f"src={path},target=/pdf,type=bind", "pdf2htmlex/pdf2htmlex:0.18.8.rc2-master-20200820-ubuntu-20.04-x86_64", "--zoom", "1.3", filename ] subprocess.call(cmd, shell=False) # 调用函数,使用原始字符串处理Windows路径,避免转义问题 pdf2html(r"C:\Users\1\", "test4.pdf")
额外说明
- 使用参数列表传递命令,
subprocess会正确解析每个参数,避免空格、特殊字符引发的错误。 - 若仍出现找不到docker的情况,可指定docker的完整路径,例如
"C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe"替换列表中的"docker"。 - Windows路径建议用原始字符串(前缀
r)或双斜杠转义,避免路径解析异常。
内容的提问来源于stack exchange,提问作者Sosa
相关产品推荐
相关产品推荐

