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
相关产品推荐
相关产品推荐

