You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:48:04