我正在尝试通过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 expanding Hello World'):电子邮件地址格式错误

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

最佳答案

<<<语法是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 - How do I pass a string into subprocess.Popen (using the stdin argument)?

09-10 01:15
查看更多