mailutils无法通过python中的subporcess.run运行

问题描述 投票:1回答:1

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

import subprocess

message = "Hello World"

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

print (process.stdout)

我收到以下错误:

邮件:无法解析地址<<<' (while expanding <<

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

尽管该命令在外壳中有效(Linux Mint> 19.0)。

python linux shell subprocess
1个回答
0
投票

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

import subprocess
message = "Hello World"

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

print (process.stdout)

但是,在动态内容上使用外壳扩展可能是一个安全问题。更好的方法是使用subprocess.run的输入功能(仅适用于python3)

import subprocess
message = "Hello World"

command = ["mail", "-s", "Test", "[email protected]"]
process = subprocess.run(
        command,
        input=message,
        stdout=subprocess.PIPE,
        universal_newlines=True)


print (process.stdout)

另请参阅Python - How do I pass a string into subprocess.Popen (using the stdin argument)?

© www.soinside.com 2019 - 2024. All rights reserved.