有时也会抛出ContentMD5错误

2024-04-25 00:01:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我基本上编写了一个函数,使用key.set_contents_from_文件()函数,但我发现它有时会抛出此错误

<Error>
<Code>BadDigest</Code>
<Message>The Content-MD5 you specified did not match what we received.</Message>    
<ExpectedDigest>TPCms2v7Hu43d+yoJHbBIw==</ExpectedDigest>
<CalculatedDigest>QSdeCsURt0oOlL3NxxGwbA==</CalculatedDigest>
<RequestId>2F0D40F29AA6DC94</RequestId><HostId>k0AC6vaV+Ip8K6kD0F4fkbdS13UdxoJ3X1M76zFUR/ZQgnIxlGJrAJ8BeQlKQ4m6</HostId></Error>

功能:

^{pr2}$

如果我打开一个pythonshell并手动调用它,它可以正常工作,但是我必须处理它的方式(它不起作用)涉及从子进程调用它。这是因为调用者是python3脚本,2to3不起作用,我不想处理python3版本的各种各样的老分支。在

不管怎么说,当它进入函数时,它似乎是正确运行的,输入是预期的(我让它们打印出来),但有问题的行一直抛出这个错误。我不知道原因是什么。在

有没有可能铲斗设置不当?我觉得如果那样的话,调用Key(bucket)会抛出一个错误

所以我基本上运行下面的脚本,一次作为从python3脚本调用的子进程,另一次从控制台调用

sudo -u www-data python botoUtilities.py uploadToS3 /path/to/file /key/path

我有这样的逻辑把它传递给正确的函数

func=None
args=[]

for arg in sys.argv[1:]:
    if not func:
        g = globals()
        func = g[arg]
    else:
        if arg=='True':
            args.append(True)
        elif arg=='False':
            args.append(False)
        else:
            args.append(arg)

if func:
    wrapper(func, args)

它在两种情况下都会运行(我写一个文件来打印参数),但只有在控制台的情况下,它才不会得到错误。这真是令人沮丧。我想不出有什么不同的做法。我只知道不可能使用boto从子进程运行向S3发送数据


Tags: 文件key函数脚本messageif进程错误