1

我使用以下 bash 代码发送电子邮件:

echo abc | mail -s Subject abc@def.com

它工作正常。现在我想在 python 中使用相同的命令,所以我写了以下内容:

call(["echo abc" "|" "mail", "-s Subject", "abc@def.com"], shell=True)

此 python 代码不会向我发送电子邮件,并且当我使用调用 python 脚本时

$python email.py

我从 shell 得到以下信息

No mail for rex

这是怎么发生的?

4

2 回答 2

2

echo如果您使用 Python,则无需在命令之间使用管道。
您可以启动一个进程并使用该communicate方法:

import subprocess

def send_message(recipient, subject, body):
    process = subprocess.Popen(['mail', '-s', subject, recipient],
                               stdin=subprocess.PIPE)
    process.communicate(body)
于 2013-04-13T20:28:33.373 回答
1

按照其他地方的建议使用subprocess.communicate是一种更好的方法。由于此处shell=True描述的原因,您应该避免使用。但是要回答您的问题,为什么您的呼叫不起作用,问题是您已将 shell 字符串分解为相当任意的字符串。如果您将整个命令作为一个字符串传递,它至少应该在 Unix-y 平台上工作。

call(["echo abc|mail -s Subject abc@def.com"], shell=True)

请参阅此处的详细信息。但不推荐这种用法。

于 2013-04-13T20:52:48.113 回答