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

Python通过subprocess调用Perl脚本报illegal base64 data错误如何解决

修复方案

问题根因

  • 使用shell=True搭配手动拼接命令字符串的传参方式,会触发shell的参数解析逻辑:你data列表里的单个空格元素拼接后会变成连续空格,shell会把连续空格识别为单个参数分隔符,直接吞掉多余空格,最终传入Perl脚本的参数顺序、内容和预期不符,base64字符串被截断或拼接其他内容就会触发解析报错。
  • shell还会对命令字符串做通配符、特殊符号转义处理,base64中的+等符号也可能被意外修改。

快速修复代码

取消shell=True配置,将命令和所有参数拆分为列表传入subprocess.Popen,subprocess会自动保留每个参数的原始内容,无需手动处理转义:

import os 
import subprocess
method = "operation"
data = ['param1', ' ', 'param2', 'LJs+p7l2KmzFWfhRxqAabcHWPHEGq2couwzktlfbpjwDoXb2GrWUGhrDwM3lwyFSK9R9rf6IAAE8szYVn3jBkQ==', ' ', ' ', 'filter_default', 'filter_default', 'filter_default',0,0]

# 构造参数列表,每个元素对应一个传参
cmd_list = ["perl", "file1.pl", method] + [str(x) for x in data]
proc = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()

内容的提问来源于stack exchange,提问作者RAJ MANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:15:04