将Bash Script Argument传递给Python电子邮件脚本

时间:2014-02-05 00:15:43

标签: python bash arguments

我有一个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技巧$@,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

每次执行时result.log文件都有内容吗?这可能是因为result.log是空的吗?