我有一个Python通知脚本,它在终端上接收电子邮件地址和命令,并发送标准错误和标准输出的电子邮件。在调用此Python脚本的bash脚本中,我运行一些其他命令并生成一些日志文件......
我想编辑Python脚本以允许另一个位置参数,以便我可以附加bash脚本在之前步骤中创建的日志文件。以下是创建附件的Python代码段:
def make_attachment(filename, content):
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(content)
Encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment; filename="'+filename+'"')
return attachment
以及附加它的代码段:
msg.attach(make_attachment('result.log', filename))
对于if __name__ == '__main__':
来电,我正在使用:
email_result(args.cmd.split(), args.email, args.log)
我应该注意,当我不使用msg.attach(make_attachment('result.log', filename))
位时,这些脚本已经一起工作了。
当我运行bash脚本时,我得到了这个回溯:
Traceback (most recent call last):
File "/home/user/scripts/notify.py", line 85, in <module>
email_result(args.cmd.split(), args.email, args.log)
File "/home/user/scripts/notify.py", line 66, in email_result
msg.attach(make_attachment('result.log', filename))
File "/home/user/scripts/notify.py", line 49, in make_attachment
Encoders.encode_base64(attachment)
File "/usr/lib/python2.7/email/encoders.py", line 45, in encode_base64
encdata = _bencode(orig)
File "/usr/lib/python2.7/email/encoders.py", line 31, in _bencode
hasnewline = (s[-1] == '\n')
TypeError: 'file' object has no attribute '__getitem__'
我想我可能不得不使用bash技巧$@
,但我不知道该怎么做。
答案 0 :(得分:0)
每次执行时result.log文件都有内容吗?这可能是因为result.log是空的吗?