Python调用Ghostscript合并UNC路径PDF报undefinedfilename错误如何解决
问题原因分析
- 核心错误:
subprocess.Popen传入列表形式的参数时,每一个列表元素都会被识别为独立的命令参数。你将多个输入PDF路径拼接为单个字符串pdfPathsAsStr传入列表,会导致Ghostscript将拼接后的整个字符串识别为单个不存在的文件名,报错信息里undefinedfilename后括号内同时出现两个路径,就是这个问题的直接体现。 - 次要问题:缺少
-dBATCH参数,会导致Ghostscript处理完成后不会自动退出,持续占用进程。
修复后的代码
import subprocess import os def ghostscript_merge_pdfs(in_PDF_list, out_PDF): """合并PDF""" # 构建基础参数列表 args = [ r"\\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Install\gs9.54.0\bin\gswin64c", '-sDEVICE=pdfwrite', '-dNOPAUSE', '-dBATCH', # 处理完成后自动退出 f"-sOUTPUTFILE={out_PDF}" ] # 所有输入PDF路径作为独立参数加到列表末尾,不需要手动拼接 args.extend(in_PDF_list) print("传入的参数列表为:") for arg in args: print(arg) p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() print("\n执行输出:") print(stdout.decode('gbk', errors='ignore')) if stderr: print("\n错误信息:") print(stderr.decode('gbk', errors='ignore')) pdf_dir = r"\\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages" out_pdf_path = os.path.join(pdf_dir, "Combo_PDF.pdf") pdfs_list = [os.path.join(pdf_dir, "PDF_1.pdf"), os.path.join(pdf_dir, "PDF_2.pdf")] ghostscript_merge_pdfs(pdfs_list, out_pdf_path)
补充说明
- 列表形式传参不需要手动处理路径中的空格、转义字符,
subprocess会自动完成参数转义,完全适配UNC路径的格式要求。 - 如果路径包含中文,可根据系统实际编码调整
decode的编码参数,中文Windows系统默认使用GBK编码。
内容的提问来源于stack exchange,提问作者Kenneth Eggering
相关产品推荐
相关产品推荐

