我正在尝试通过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)?