首页 > 解决方案 > mailutils 无法通过 python 中的 subprocess.run 工作

问题描述

我正在尝试通过 python 的 subprocess.run 方法发送邮件。不幸的是,它不起作用。

import subprocess

message = "Hello World"

process = subprocess.run(["mail", "-s", "Test, "xyz@xyz.com", "<<<", message], 
                     stdout=subprocess.PIPE, 
                     universal_newlines=True)

print (process.stdout)

我收到以下错误:

邮件:无法解析地址<<<' (while expanding<<<'):格式错误的电子邮件地址

邮件:无法解析地址Hello World' (while expandingHello World'):格式错误的电子邮件地址

该命令在 shell 中运行(Linux Mint > 19.0)。

标签: pythonlinuxshellsubprocess

解决方案


<<<语法是 bash 的一个特性。如果要使用它,则需要将命令作为 bash shell 的参数运行:

import subprocess
message = "Hello World"

command = "mail -s Test abc@def.com <<< "+message
process = subprocess.run(
        ["bash","-c",command],
        stdout=subprocess.PIPE,
        universal_newlines=True)

print (process.stdout)

但是,对动态内容使用 shell 扩展可能是一个安全问题。更好的方法是使用 subprocess.run 的输入功能(仅限 python3)

import subprocess
message = "Hello World"

command = ["mail", "-s", "Test", "abc@def.com"]
process = subprocess.run(
        command,
        input=message,
        stdout=subprocess.PIPE,
        universal_newlines=True)


print (process.stdout)

另请参阅Python - 如何将字符串传递给 subprocess.Popen(使用 stdin 参数)?


推荐阅读