【问题标题】:illegal base64 data at input byte 6输入字节 6 处的非法 base64 数据
【发布时间】:2021-08-08 00:19:41
【问题描述】:

所以,我正在使用 subprocess 将我的参数(一个列表和一个字符串)从我的 python 文件传递​​给一个 perl 文件,但它会抛出一个错误。

python 代码

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

proc = subprocess.Popen("perl"+" "+"file1.pl "+method+" " + " ".join([str(x) for x in data]),shell=True,stdout=subprocess.PIPE)
out,err = proc.communicate()

编译时返回的是我这个

illegal base64 data at input byte 6\n

有什么快速解决办法吗?

【问题讨论】:

    标签: python perl subprocess


    【解决方案1】:

    您的 base64 数据没有任何问题。我的猜测是您的 Perl 脚本正在尝试解码“filter_default”,其中字节 6 是无效的 base64。

    我注意到您的data 列表中有空格,但您将命令创建为一个长字符串。这不会被视为空白参数。你会发送

    perl file1.pl operation param1   param2 lJs+p...   filter_default filter_default
    

    并且不会看到空格。如果你真的需要发送空参数,那么只需向 Popen 发送一个列表:

    import os 
    import subprocess
    method = "operation"
    data = ['param1', ' ', 'param2', 'LJs+p7l2KmzFWfhRxqAabcHWPHEGq2couwzktlfbpjwDoXb2GrWUGhrDwM3lwyFSK9R9rf6IAAE8szYVn3jBkQ==', ' ', ' ', 'filter_default', 'filter_default', 'filter_default']
    
    proc = subprocess.Popen( ["perl", "file1.pl", method] + data,shell=True,stdout=subprocess.PIPE)
    out,err = proc.communicate()
    

    【讨论】:

    • 在这种情况下,它总是抛出第二个参数应该只包含字符串
    • 什么作用? Popen 还是你的 Perl 脚本?即使在最初的问题中,您也确实没有对此非常具体。
    • 我的 Python 代码是这样做的,我们已经调试了实际问题,这是关于未考虑的空间
    • @RAJ MANI,谁不考虑空间?那有什么意思?请付出一些努力。如果你的英语有问题,那就更有理由清楚地展示你想要达到的目标,而你似乎没有尝试过。
    • 他承认我说的话;他们认为这些空格是作为单独的参数传输到 Perl 代码的。我怀疑这个问题现在已经完成了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2021-03-16
    • 2023-03-21
    • 1970-01-01
    • 2018-06-18
    • 2020-02-15
    相关资源
    最近更新 更多