将Bash脚本参数传递给Python电子邮件脚本

将Bash脚本参数传递给Python电子邮件脚本,python,bash,arguments,Python,Bash,Arguments,我有一个Python notify脚本,它在终端上接收电子邮件地址和命令,并发送带有标准错误和标准输出的电子邮件。在调用此Python脚本的bash脚本中,我运行了一些其他命令并生成了一些日志文件 我想编辑Python脚本以允许另一个位置参数,以便可以附加bash脚本在前面步骤中创建的日志文件。以下是创建附件的Python代码段: def make_attachment(filename, content): attachment = MIMEBase('application', 'o

我有一个Python notify脚本,它在终端上接收电子邮件地址和命令,并发送带有标准错误和标准输出的电子邮件。在调用此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))
对于
如果uuuu name_uuuuu='\uuuuuu main\uuuuuu':
调用,我使用:

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__'
回溯(最近一次呼叫最后一次):
文件“/home/user/scripts/notify.py”,第85行,在
电子邮件\u结果(args.cmd.split()、args.email、args.log)
电子邮件结果中第66行的文件“/home/user/scripts/notify.py”
msg.attach(制作附件('result.log',文件名))
文件“/home/user/scripts/notify.py”,第49行,在make_附件中
编码器。编码_base64(附件)
文件“/usr/lib/python2.7/email/encoders.py”,第45行,在encode_base64中
encdata=_本代码(orig)
文件“/usr/lib/python2.7/email/encoders.py”,第31行,在_bencode中
hasnewline=(s[-1]='\n')
TypeError:“文件”对象没有属性“\uuuu getitem\uuuu”

我想我可能必须使用bash技巧
$@
,但我不确定如何做到这一点。

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

问得好。。。两件事。我在别处运行了这个通知脚本,即使附件是空的,也会通过电子邮件发送。它们只是空文件。另外,该文件是在bash脚本中创建的,它只包含命令的输出(如果运行命令,它总是向终端返回一些内容)。因此,是的,它应该始终包含某些内容,并且不应为空。是否已通过在方法中打印文件名和内容进行调试?